Wykryj interwały anomalii za pomocą SQL
Mój problem jest prosty: mam tabelę z szeregiem statusów i znaczników czasu (ze względu na ciekawość, te stany wskazują poziomy alarmów) i chciałbym zapytać o tę tabelę, aby uzyskać czas trwania między dwoma statusami.
Wydaje się proste, ale tutaj pojawia się trudna część: nie mogę tworzyć tabel przeglądowych, procedur i powinno być tak szybko, jak to możliwe, ponieważ ta tabela jest małym potworem posiadającym ponad miliard rekordów (bez żartów!) ...
Schemat jest bardzo prosty:
[pk] Wartość czasu
(właściwie, jest drugi pk, ale jest to bezużyteczne)
A poniżej prawdziwego świata:
Timestamp Status 2013-1-1 00:00:00 1 2013-1-1 00:00:05 2 2013-1-1 00:00:10 2 2013-1-1 00:00:15 2 2013-1-1 00:00:20 0 2013-1-1 00:00:25 1 2013-1-1 00:00:30 2 2013-1-1 00:00:35 2 2013-1-1 00:00:40 0
Wyjście, biorąc pod uwagę tylko alarm poziomu 2, powinno być następujące, powinno zgłosić początek alarmu poziomu 2 i jego koniec (gdy osiągnie 0):
StartTime EndTime Interval 2013-1-1 00:00:05 2013-1-1 00:00:20 15 2013-1-1 00:00:30 2013-1-1 00:00:40 10
Próbowałem wszelkiego rodzaju wewnętrznych połączeń, ale wszystkie prowadzą mnie do niesamowitej eksplozji kartezjańskiej. Czy możecie pomóc mi znaleźć sposób, aby to osiągnąć?
Dzięki!