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!

questionAnswers(4)

yourAnswerToTheQuestion