Обнаружить аномальные интервалы с помощью SQL

Моя проблема проста: у меня есть таблица с серией статусов и временных меток (для любопытства, эти статусы указывают уровни сигналов тревоги), и я хотел бы запросить эту таблицу, чтобы получить длительность между двумя состояниями.

Кажется простым, но тут возникает сложная часть: я могуt создавать справочные таблицы, процедуры, и это должно быть как можно быстрее, поскольку эта таблица - маленький монстр, содержащий более 1 миллиарда записей (без шуток!) ...

Схема проста:

[pk] Время Значение

(на самом деле, есть второй ПК, но это бесполезно для этого)

И ниже пример из реального мира:

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

Выход, учитывая только тревогу уровня 2, должен быть таким, как следует, должен сообщать о начале тревоги уровня 2 и его конце (при достижении 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

Я пробовал всевозможные внутренние соединения, но все они приводят меня к удивительному декартовому взрыву. Можете ли вы, ребята, помочь мне найти способ сделать это?

Спасибо!

Ответы на вопрос(4)

Ваш ответ на вопрос