Tengo el siguiente conjunto de fechas (dd/mm/aaaa) Eventos en mi base de datos que emparejan:Calcular los intervalos de fechas que faltan y los intervalos de fechas que se solapan entre dos fechas
eventId startDate endDate 1 02/05/2009 10/05/2009 2 08/05/2009 12/05/2009 3 10/05/2009 12/05/2009 4 21/05/2009 21/05/2009 5 25/05/2009 NULL 6 01/06/2009 03/06/2009
Los eventos tienen una fecha de inicio y fin (los tiempos no importan) y un NULL endDate significa que el evento aún está en progreso.
Lo que me gustaría determinar es el rango de fechas entre dos fechas arbitrarias donde a) no hubo evento yb) los eventos se superpusieron.
Así que para un rango de fechas de entrada del 01/04/2009 - 30/06/2009 que se puede esperar a tener los siguientes resultados:
no event: 01/04/2009 - 01/05/2009 overlap : 08/05/2009 - 10/05/2009 overlap : 10/05/2009 - 12/05/2009 no event: 13/05/2009 - 20/05/2009 no event: 22/05/2009 - 24/05/2009 overlap : 01/06/2009 - 03/06/2009
Tenga en cuenta que los dos intervalos se superponen adyacentes serían aceptables como uno resultado.
¿Alguien puede ayudarme con un algoritmo de SQL para generar este conjunto de resultados?
EDITAR: La base de datos de la plataforma de destino es SQL Server 2005. Las fechas se registran como 10/05/2009 00:00:00, lo que significa que el evento terminó en algún momento entre el 10/5/2009 00:00:00 y 10/5/2009 23:59:59. Lo mismo es cierto para las fechas de inicio. El intervalo de fechas de entrada también se puede leer como 01/04/2009 00:00:00 - 30/06/2009 23:59:59.
En qué plataforma (s) base de datos va a ser la ejecución de esta consulta? –