Planes de tiempo de intersección planos

Tengo muchos datos con tiempos de inicio y finalización para una ID determinada y necesito aplanar todos los intervalos de tiempo adyacentes y de intersección en un intervalo de tiempo combinado. Los datos de muestra publicados a continuación son todos para la misma ID, así que no los enumeré.

Para aclarar las cosas un poco, eche un vistazo a los datos de muestra para el 03.06.2009:

os siguientes períodos de tiempo se superponen o son continuos y deben fusionarse en un intervalo de tiempo

05: 54: 48 - 10: 00: 13 09: 26: 45 - 09: 59: 40

El intervalo de tiempo resultante sería de 05:54:48 a 10:00:13. Como hay una brecha entre las 10:00:13 y las 10:12:50, también tenemos los siguientes intervalos de tiempo:

10: 12: 50 - 10: 27: 25 10: 13: 12 - 11: 14: 56 10: 27: 25 - 10: 27: 31 10: 27: 39 - 13: 53: 38 11: 14: 56 - 11: 15: 03 11: 15: 30 - 14: 02: 14 13:53:38 - 13:53:43 14: 02: 14 - 14: 02: 31

que da como resultado un intervalo de tiempo combinado de 10:12:50 a 14:02:31, ya que se superponen o son adyacentes.

A continuación encontrará los datos de muestra y los datos aplanados, ya que los necesitaría. La columna de duración es solo informativa.

e agradece cualquier solución, ya sea SQL o n

EDITA: Dado que hay muchas soluciones diferentes e interesantes, estoy refinando mi pregunta original agregando restricciones para ver la "mejor" (si hay una) solución que surge:

Recibo los datos a través de ODBC de otro sistema. No hay forma de cambiar el diseño de la tabla para mí o agregar índices Los datos se indexan solo por la columna de fecha (la parte de tiempo no lo está)Hay alrededor de 2.5k filas por cada día El patrón de uso estimado de los datos es aproximadamente el siguiente: La mayoría de las veces (digamos 90%) el usuario consultará solo uno o dos días (2.5k - 5k filas)A veces (9%) el rango será de hasta un mes (~ 75k filas) Raramente (1%) el rango será de hasta un año (~ 900k filas) La consulta debe ser rápida para el caso típico y no "durar para siempre" para el caso raro. Consultar un año de datos lleva unos 5 minutos (selección simple sin combinaciones)

Dentro de estas limitaciones, ¿cuál sería la mejor solución? Me temo que la mayoría de las soluciones serán terriblemente lentas ya que se unen en la combinación de fecha y hora, que no es un campo de índice en mi caso.

¿Haría todas las fusiones en el lado del cliente o del servidor? ¿Primero crearía una tabla temporal optimizada y usaría una de las soluciones propuestas con esa tabla? No tuve tiempo de probar las soluciones hasta ahora, pero lo mantendré informado sobre lo que funciona mejor para mí.

Data de muestra

Date       | Start    | Stop
-----------+----------+---------
02.06.2009 | 05:55:28 | 09:58:27
02.06.2009 | 10:15:19 | 13:58:24
02.06.2009 | 13:58:24 | 13:58:43
03.06.2009 | 05:54:48 | 10:00:13
03.06.2009 | 09:26:45 | 09:59:40
03.06.2009 | 10:12:50 | 10:27:25
03.06.2009 | 10:13:12 | 11:14:56
03.06.2009 | 10:27:25 | 10:27:31
03.06.2009 | 10:27:39 | 13:53:38
03.06.2009 | 11:14:56 | 11:15:03
03.06.2009 | 11:15:30 | 14:02:14
03.06.2009 | 13:53:38 | 13:53:43
03.06.2009 | 14:02:14 | 14:02:31
04.06.2009 | 05:48:27 | 09:58:59
04.06.2009 | 06:00:00 | 09:59:07
04.06.2009 | 10:15:52 | 13:54:52
04.06.2009 | 10:16:01 | 13:24:20
04.06.2009 | 13:24:20 | 13:24:24
04.06.2009 | 13:24:32 | 14:00:39
04.06.2009 | 13:54:52 | 13:54:58
04.06.2009 | 14:00:39 | 14:00:49
05.06.2009 | 05:53:58 | 09:59:12
05.06.2009 | 10:16:05 | 13:59:08
05.06.2009 | 13:59:08 | 13:59:16
06.06.2009 | 06:04:00 | 10:00:00
06.06.2009 | 10:16:54 | 10:18:40
06.06.2009 | 10:18:40 | 10:18:45
06.06.2009 | 10:23:00 | 13:57:00
06.06.2009 | 10:23:48 | 13:57:54
06.06.2009 | 13:57:21 | 13:57:38
06.06.2009 | 13:57:54 | 13:57:58
07.06.2009 | 21:59:30 | 01:58:49
07.06.2009 | 22:12:16 | 01:58:39
07.06.2009 | 22:12:25 | 01:58:28
08.06.2009 | 02:10:33 | 05:56:11
08.06.2009 | 02:10:43 | 05:56:23
08.06.2009 | 02:10:49 | 05:55:59
08.06.2009 | 05:55:59 | 05:56:01
08.06.2009 | 05:56:11 | 05:56:14
08.06.2009 | 05:56:23 | 05:56:27

Resultado aplanado:

Date       | Start    | Stop     | Duration
-----------+----------+----------+---------
02.06.2009 | 05:55:28 | 09:58:27 | 04:02:59
02.06.2009 | 10:15:19 | 13:58:43 | 03:43:24
03.06.2009 | 05:54:48 | 10:00:13 | 04:05:25
03.06.2009 | 10:12:50 | 14:02:31 | 03:49:41
04.06.2009 | 05:48:27 | 09:59:07 | 04:10:40
04.06.2009 | 10:15:52 | 14:00:49 | 03:44:58
05.06.2009 | 05:53:58 | 09:59:12 | 04:05:14
05.06.2009 | 10:16:05 | 13:59:16 | 03:43:11
06.06.2009 | 06:04:00 | 10:00:00 | 03:56:00
06.06.2009 | 10:16:54 | 10:18:45 | 00:01:51
06.06.2009 | 10:23:00 | 13:57:58 | 03:34:58
07.06.2009 | 21:59:30 | 01:58:49 | 03:59:19
08.06.2009 | 02:10:33 | 05:56:27 | 03:45:54

Respuestas a la pregunta(14)

Su respuesta a la pregunta