Я следующий набор дат (дд/мм/гггг), соответствующих событий в моей базе данных:Вычислить диапазоны отсутствует дата и перекрывающиеся диапазоны дат между двумя датами
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 означает, что событие все еще продолжается.
То, что я хотел бы определить, - это диапазоны дат между двумя произвольными датами, когда было а) нет события, и б) события перекрывались.
Так для диапазона дат ввода от 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 для генерации этого набора результатов?
EDIT: база данных целевой платформы - это SQL Server 2005. Даты записываются как 10/05/2009 00:00:00, что означает, что событие закончилось с 10/5/2009 00:00:00 и 05.10.2009 23:59:59. То же самое относится к датам начала. Поэтому диапазон дат ввода также можно прочитать как 01/04/2009 00:00:00 - 30/06/2009 23:59:59.
, на какой платформе базы данных (ы) вы будете выполняющей этот запрос? –