Buscar intervalos de um determinado campo SQL

08/01/2020

11

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
Responder

Post mais votado

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

Responder

Mais Posts

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.
Responder
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.
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários. Para saber mais sobre o uso de cookies,
consulte nossa política de privacidade. Ao continuar navegando em nosso site, você concorda com a nossa política.

Aceitar