Ich habe eine Tabelle mit mehreren Spalten und möchte nach einem Spaltenwert suchen. Wählen Sie die Zeilen nach diesem Spaltenwert aus, bis ein separater Spaltenwert angezeigt wird. Ich habe versucht, zu verwenden BETWEEN
, aber wenn die Spaltenwerte Ganzzahlen sind, sucht es nur nach Zahlen zwischen den Ganzzahlen.
Zum Beispiel, wenn ich eine Tabelle wie diese habe:
ID-Zeitwert t1 12:00 PM 15 t1 12:02 PM 4 t1 12:03 PM 7 t1 12:05 Uhr 16 t5 12:10 Uhr 250 t5 12:15 PM 15 t8 11:00 Uhr 15 t8 15:00 Uhr 2 t8 15:05 Uhr 100 t2 19:00 Uhr 15 t2 7:01 PM 16 t15 5:00 Uhr 35
Ich mag die Zeilen zwischen Werten von 15 und 16 grundsätzlich bekommen, wenn ich von sortieren könnte id
, dann time
, und sammle die Reihen nach 15 erscheint , bis ein Wert von 16 innerhalb derselben ist id
. Wenn es keinen Wert 16 gibt, würde ich zum Beispiel die nächsten 100 Zeilen wollen und dann nach dem nächsten Wert von 15 suchen.
Ich möchte, dass die Abfrage Folgendes zurückgibt:
ID-Zeitwert t1 12:00 PM 15 t1 12:02 PM 4 t1 12:03 PM 7 t1 12:05 Uhr 16 t2 19:00 Uhr 15 t2 7:01 PM 16 t5 12:15 PM 15 t8 11:00 Uhr 15 t8 15:00 Uhr 2 t8 15:05 Uhr 100
Das kann verwirrend sein. Ich habe es versucht:
SELECT * FROM table WHERE value BETWEEN '15' AND '16' ORDER BY id, time
als Ausgangspunkt, aber das gibt nur Zeilen mit Werten von 15 oder 16 zurück, weil sie ganze Zahlen sind.
Ich möchte die Tabelle bis id
dahin sortieren time
. Diese Einträge werden automatisch über ein anderes System hinzugefügt, daher versuche ich, die Tabelle nach bestimmten Wertebereichen abzufragen.
Irgendwelche Ideen?
Klärung:
Wenn ich Reihen mit 15, 1, 16, 7, 15, 2, 16
dem gleichen hätte id
, würde ich beide "Inseln" wollen : 15, 1, 16, 15, 2, 16
.
quelle
Antworten:
Ein Vorschlag, der in der Version 2008 funktionieren sollte.
Getestet bei rextester.com :
Mehr Info:
quelle
quelle
COUNT(*) OVER (ORDER BY ..)
erlaubt.