Buscar intervalos de um determinado campo SQL

SQL

Banco de Dados

SELECT

Análise de dados

Oracle PL SQL

08/01/2020

Boa tarde, estou tentando montar um select sql simples, para buscar intervalos de um campo de uma tabela.
Tenho o seguinte campo com os seguintes dados abaixo:

NUMERO_DE_SERIE
------------------
30
31
32
33
34
35
36
A50
A51
A52
A53
B90
C1000,
D400,
M5001
M5002
M5003
M5004

Preciso trazer os dados que sejam sequenciais, de 1 em 1, quando não for, trazer separado como a seguir:
RETORNO_INTERVALOS_NUM_SERIE
------------------
30____36
A50_____A53
B90
C1000
D400
M5001_____M5004
Mauricio Espido

Mauricio Espido

Curtidas 0

Melhor post

Fernando Junior

Fernando Junior

08/01/2020

Boa tarde, estou tentando montar um select sql simples, para buscar intervalos de um campo de uma tabela.
Tenho o seguinte campo com os seguintes dados abaixo:

NUMERO_DE_SERIE
------------------
30
31
32
33
34
35
36
A50
A51
A52
A53
B90
C1000,
D400,
M5001
M5002
M5003
M5004

Preciso trazer os dados que sejam sequenciais, de 1 em 1, quando não for, trazer separado como a seguir:
RETORNO_INTERVALOS_NUM_SERIE
------------------
30____36
A50_____A53
B90
C1000
D400
M5001_____M5004


Acho que com SQL puro você não consegue o seu intento. Você simplesmente tem que trazer todos os registros em ordem numérica e fazer algum tratamento procedural em um loop, onde para cada elemento lido você vai ver se o seguinte é sequencial e atẽ quando tem essa continuidade e imprimir do jeito que você quer.

SELECT NUMERO_DE_SERIE FROM <tabela>
ORDER BY NUMERO_DE_SERIE
// loop trantando os elementos trazidos em ordem

GOSTEI 1

Mais Respostas

Mauricio Espido

Mauricio Espido

08/01/2020

Acho que vou ter que achar um jeito de classificar todos os sequenciais e então vou conseguir fazer um first e last value em cada bloco separado. E obrigado pela resposta.
GOSTEI 0
Anderson Gonçalves

Anderson Gonçalves

08/01/2020

Fala boy seguinte...

Se você quer intervalo faça:

With ADOQuery do
begin
close;
sql.clear;
sql.add('select * from tabela');
sql.add('where campo between :ini and :fim');
parameters.parambyname('ini').value := Edit1.Text;
parameters.parambyname('fim').value := Edit2.text;
open;
end;

Espero ter ajudado.
GOSTEI 0
POSTAR