Eu tenho uma tabela contendo várias colunas e quero verificar um valor de coluna, selecione as linhas após esse valor até que um valor de coluna separado apareça. Eu tentei usar BETWEEN
, mas se os valores da coluna são números inteiros, ele procura apenas números entre os números inteiros.
Por exemplo, se eu tiver uma tabela como esta:
valor do tempo de identificação t1 12:00 15 t1 12:02 4 t1 12:03 7 t1 12:05 16 t5 12:10 PM 250 t5 12:15 15 t8 11:00 15 t8 15:00 2 t8 15:05 100 t2 19:00 15 t2 19:01 16 t15 5:00 35
Eu gostaria de obter as linhas entre os valores de 15 e 16. Basicamente, se eu pudesse classificar por id
, então time
, e reunir as linhas após 15 aparecer até que haja um valor de 16 dentro do mesmo id
. Se não houver valor 16, eu desejaria as próximas 100 linhas, por exemplo, e depois procuraria o próximo valor de 15.
Gostaria que a consulta retornasse isso:
valor do tempo de identificação t1 12:00 15 t1 12:02 4 t1 12:03 7 t1 12:05 16 t2 19:00 15 t2 19:01 16 t5 12:15 15 t8 11:00 15 t8 15:00 2 t8 15:05 100
Isso pode ser confuso. Eu tentei:
SELECT * FROM table WHERE value BETWEEN '15' AND '16' ORDER BY id, time
como ponto de partida, mas que retorna somente linhas com valores de 15 ou 16 porque são números inteiros.
Quero ordenar a mesa até id
lá time
. Essas entradas são adicionadas automaticamente através de outro sistema, por isso estou tentando consultar a tabela para intervalos de valores específicos.
Alguma ideia?
Esclarecimento:
Se eu tivesse linhas com 15, 1, 16, 7, 15, 2, 16
a mesma id
, eu gostaria tanto "ilhas": 15, 1, 16, 15, 2, 16
.
Respostas:
Uma sugestão que deve funcionar na versão 2008.
Testado em rextester.com :
Mais informações:
fonte
fonte
COUNT(*) OVER (ORDER BY ..)
permitido.