Detectar intervalos de anomalías con SQL

Mi problema es simple: tengo una tabla con una serie de estados y marcas de tiempo (por curiosidad, estos estados indican niveles de alarma) y me gustaría consultar esta tabla para obtener la duración entre dos estados.

Parece simple, pero aquí viene la parte difícil: no puedo crear tablas de consulta, procedimientos y debería ser lo más rápido posible, ya que esta tabla es un pequeño monstruo con más de 1 billón de registros (¡no es broma!)

El esquema es drop dead simple:

[pk] Valor de tiempo

(Actualmente, hay un segundo pk, pero es inútil para esto)

Y debajo de un ejemplo del mundo real:

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

La salida, considerando solo una alarma de nivel 2, debe ser como sigue, debe informar el comienzo de una alarma de nivel 2 y su finalización (cuando llegue a 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

He intentado todo tipo de uniones internas, pero todas me han llevado a una sorprendente explosión cartesiana. ¿Pueden ustedes ayudarme a encontrar una manera de lograr esto?

¡Gracias!

Respuestas a la pregunta(4)

Su respuesta a la pregunta