je l'ensemble suivant des dates (jj/mm/aaaa) correspondant à des événements dans ma base de données:Calculer les plages de dates manquants et des plages de dates qui se chevauchent entre deux dates
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
Les événements ont un début et une date de fin (les temps n'ont pas d'importance) et une valeur endDate NULL signifie que l'événement est toujours en cours. Ce que je voudrais déterminer est les plages de dates entre deux dates arbitraires où il y avait a) aucun événement et b) les événements se chevauchaient.
Donc, pour une plage de dates d'entrée 01/04/2009 - 30/06/2009 j'attendre d'avoir les résultats suivants:
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
Notez que les deux plages de chevauchement adjacentes seraient acceptables comme un résultat.
Quelqu'un peut-il s'il vous plaît m'aider avec un algorithme SQL pour générer cet ensemble de résultats?
EDIT: La base de données de la plate-forme cible est SQL Server 2005. Les dates sont enregistrées en tant que 10/05/2009 00:00:00, ce qui signifie que l'événement s'est terminé entre le 05/05/2009 00:00:00 et 05/10/2009 23:59:59. La même chose est vraie pour les dates de début. La plage de dates d'entrée peut donc être lue comme 01/04/2009 00:00:00 - 30/06/2009 23:59:59.
Sur quelle plate-forme de base de données (s) vous exécuter cette requête? –