Рассчитать пропущенные диапазоны дат и перекрывающиеся диапазоны дат между двумя датами
У меня есть следующий набор дат (дд / мм / гггг) совпадающих событий в моей базе данных:
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
События имеют дату начала и окончания (время не имеет значения), а NULL endDate означает, что событие все еще продолжается.
То, что я хотел бы определить, - это диапазоны дат между двумя произвольными датами, когда a) не было события и b) события перекрывались.
Таким образом, для диапазона дат ввода 01/04/2009 - 30/06/2009 я ожидал бы получить следующие результаты:
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
Обратите внимание, что два соседних диапазона перекрытия будут приемлемы как один результат.
Может кто-нибудь, пожалуйста, помогите мне с алгоритмом SQL для генерации этого набора результатов?
РЕДАКТИРОВАТЬ: База данных целевой платформы SQL Server 2005. Даты записываются как 10/05/2009 00:00:00, что означает, что событие закончилось некоторое время между 5/5/2009 00:00:00 и 10/5 / 2009 23:59:59. То же самое верно для дат начала. Поэтому диапазон вводимых дат также можно прочитать как 01/04/2009 00:00:00 - 30/06/2009 23:59:59.