J'ai un tableau contenant plusieurs colonnes et je souhaite vérifier une valeur de colonne, sélectionnez les lignes après cette valeur de colonne jusqu'à ce qu'une valeur de colonne distincte s'affiche. J'ai essayé d'utiliser BETWEEN
, mais si les valeurs de colonne sont des entiers, il ne recherche que des nombres entre les entiers.
Par exemple, si j'ai une table comme celle-ci:
valeur de temps id t1 12:00 PM 15 t1 12:02 PM 4 t1 12:03 PM 7 t1 12:05 PM 16 t5 12:10 PM 250 t5 12:15 PM 15 t8 11:00 AM 15 t8 15 h 00 2 t8 15h05 100 t2 7:00 PM 15 t2 7:01 PM 16 t15 5:00 AM 35
Je voudrais obtenir les lignes entre les valeurs de 15 et 16. Fondamentalement, si je pouvais trier par id
, alors time
, et rassembler les lignes après que 15 apparaisse jusqu'à ce qu'il y ait une valeur de 16 dans ce même id
. S'il n'y a pas de valeur 16, je voudrais par exemple les 100 lignes suivantes, puis rechercher la valeur suivante de 15.
Je voudrais que la requête renvoie ceci:
valeur de temps id t1 12:00 PM 15 t1 12:02 PM 4 t1 12:03 PM 7 t1 12:05 PM 16 t2 7:00 PM 15 t2 7:01 PM 16 t5 12:15 PM 15 t8 11:00 AM 15 t8 15 h 00 2 t8 15h05 100
Cela peut prêter à confusion. J'ai essayé:
SELECT * FROM table WHERE value BETWEEN '15' AND '16' ORDER BY id, time
comme point de départ, mais qui ne renvoie que des lignes avec des valeurs de 15 ou 16 car ce sont des entiers.
Je veux trier le tableau d'ici id
là time
. Ces entrées sont ajoutées automatiquement via un autre système, donc j'essaie d'interroger la table pour des plages de valeurs spécifiques.
Des idées?
Clarification:
Si j'avais des lignes avec 15, 1, 16, 7, 15, 2, 16
le même id
, je veux les deux « îles »: 15, 1, 16, 15, 2, 16
.
Réponses:
Une suggestion qui devrait fonctionner dans la version 2008.
Testé sur rextester.com :
Plus d'informations:
la source
la source
COUNT(*) OVER (ORDER BY ..)
autorisé.