Ich habe also eine Tabelle in SQL Server 2014, in der Ereignisse gespeichert sind. Ereignisse werden nicht schneller als einmal pro 10 Sekunden generiert, können jedoch viel langsamer sein (Minuten oder Stunden zwischen Ereignissen). Die Zeit zwischen den Ereignissen ist nicht einheitlich.
Ich möchte die Aufzeichnungen nach Zeit abtasten.
Zum Beispiel möchte ich um eine 10-minütige Abtastung bitten - also würde es Datensatz 1 erfassen, und der nächste Datensatz sollte mindestens 10 Minuten später sein, und der nächste ist mindestens 10 Minuten später als Zeile 2 , und so weiter.
Ich kann dies mit einem iterativen Ansatz erreichen, bei dem jeder Datensatz durchlaufen wird, aber ich möchte, dass die Datenbank die Arbeit erledigt. Das Problem ist, ich weiß nicht, wie ich das mit T-SQL set / window-Anweisungen machen soll.
Kann mir jemand helfen?
Beispieldaten:
EventID | RecordTime
--------+--------------------
1 | 2017-04-01 12:00:00
2 | 2017-04-01 12:00:10
3 | 2017-04-01 12:00:20
4 | 2017-04-01 12:00:32
5 | 2017-04-01 12:05:42
6 | 2017-04-01 12:09:00
7 | 2017-04-01 12:24:12
8 | 2017-04-01 12:36:46
9 | 2017-04-01 12:36:57
10 | 2017-04-01 15:00:00
Erwünschtes Ergebnis:
EventID | RecordTime
--------+--------------------
1 | 2017-04-01 12:00:00
7 | 2017-04-01 12:24:12
8 | 2017-04-01 12:36:46
10 | 2017-04-01 15:00:00
- Die EventIDs 2-6 befinden sich alle innerhalb von 10 Minuten nach Datensatz 1, daher möchte ich sie nicht.
- EventID 7 ist 24 Minuten 12 Sekunden später als der letzte Datensatz in meiner Ergebnismenge (EventID 1), also möchte ich es.
- EventID 8 ist 12 Minuten 34 Sekunden später als der letzte Datensatz in meiner Ergebnismenge (EventID 7), also möchte ich es.
- EventID 9 ist 11 Sekunden später als der letzte Datensatz in meiner Ergebnismenge (EventID 8), daher möchte ich es nicht.
- EventID 10 ist apx. 2,5 Stunden später als der letzte Datensatz in meiner Ergebnismenge (EventID 9), also möchte ich es.
quelle
2017-04-01 12:10:01
? Es ist nur 1 Minute 1 Sekunde nach dem vorherigen Ereignis (2017-04-01 12:09:00
), aber es ist mehr als 10 Minuten nach dem ersten Ereignis (2017-04-01 12:00:00
). Möchten Sie dieses Ereignis in der Ergebnismenge sehen?Antworten:
Wenn Sie kein Ereignis bei möchten
12:10:01
, ist die Antwort sehr einfach: VerwendenLEAD
oderLAG
vergleichen Sie die Zeitstempel der beiden aufeinander folgenden Zeilen. Beachten Sie jedoch, dass bei einer langen Sequenz von Ereignissen, bei denen jedes Ereignispaar weniger als 10 Minuten voneinander entfernt ist, die Abfrage nur das erste Ereignis dieser Sequenz zurückgibt.Mit anderen Worten, zwischen zwei Ereignissen muss eine Lücke von mehr als 10 Minuten liegen, um der Ergebnismenge eine Zeile hinzuzufügen.
Beispieldaten
Abfrage
Ergebnis
quelle
2017-04-01 12:10:12
(10 Minuten 12 Sekunden nach EventID 1) ändern, wird sie nicht aufgenommen, weil die Die Lücke zum vorherigen Datensatz (EventID 6) beträgt 1 Minute und 12 Sekunden. Es ist jedoch erwünscht, dass es enthalten ist. Irgendwelche Gedanken?