Angenommen die Selektion erfolgt am 14.02.:
Gesucht werden soll zunächst der erste Eintrag für den aktuellen Tag, also ID 4. Ausgehend davon soll geprüft werden, ob es Daten gibt, die einen Zeitstempel < dem Zeitstempel von ID 4 haben. Es sollen aber nur so lange Daten gewählt werden, bis die “Lücke” zw. zwei Zeitstempeln größer 5min ist (also ID 3 und 2). Gleiches soll für alle Datensätze mit einem Zeitstempel > dem Zeitstempel von ID 4 geschehen, ebenfalls bis die “Lücke” größer 5min wird (also 5, 6, 7, 8).
Ergebnis für obiges Beispiel soll also sein:
ID ;TIMESTMP
2 ;13.02.2008 23:57:23
3 ;13.02.2008 23:58:52
4 ;14.02.2008 00:01:16
5 ;14.02.2008 00:01:41
6 ;14.02.2008 00:03:37
7 ;14.02.2008 00:06:22
8 ;14.02.2008 00:09:12
Idealerweise sollte das Statement sowohl auf Oracle als auch auf DB2 laufen. Wer kann mir bei diesem Problem helfen?
Danke!
vielen Dank für Deine Antwort.
Ich versuche die Anforderung noch einmal etwas anders zu formulieren (für Datensätze, die >= ID 4 gefunden werden sollen):
Ausgehend von ID 4 wird geschaut, ob es einen Datensatz gibt, der einen größeren Zeitstempel hat, aber nicht weiter als 5min von ID 4 entfernt ist. Gefunden wird ID 5. Ausgehend von ID 5 wird nun wieder geschaut, ob es einen Datensatz gibt, dessen Zeitstempel nicht weiter als 5min entfernt liegt. Gefunden wird ID 6. Und so weiter. Erst zw. ID 8 und ID 9 liegen mehr als 5min, also wird dieser Satz ignoriert, gleiches gilt für ID 10.
Du könntest das Problem z.B. in eine Client-Funktion implementieren, und dort über eine Zwischenschicht wie SQLAlchemy bei Python das Statement für verschiedene Engines aufbereiten lassen. Wenn sich der Aufwand lohnt, unter normalem SQL sehe ich da wenig Chancen.
Inzw. ist klar, dass Oracle das DBMS der Wahl ist. Was ist denn das Pendant zu Set Returning Functions in Oracle? Gibt es ggf. einen Ansatz unter Oracle mit temp. Tabellen als Zwischenspeicher an die Aufgabe heranzugehen?