Обнаружить аномальные интервалы с помощью 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
Я пробовал всевозможные внутренние соединения, но все они приводят меня к удивительному декартовому взрыву. Можете ли вы, ребята, помочь мне найти способ сделать это?
Спасибо!