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,我希望得到以下结果:
没有事件: 01/04/2009 - 01/05/2009 重叠: 08/05/2009 - 10/05/2009 重叠: 10/05/2009 - 12/05/2009 没有事件: 13/05/2009 - 20/05/2009 没有事件: 22/05/2009 - 24/05/2009 重叠: 01/06/2009 - 03/06/2009
请注意,两个相邻的重叠范围会被视为一个结果。
有谁能帮我提供一个SQL算法来生成这个结果集吗?
编辑:目标平台数据库是SQL Server 2005。日期被记录为10/05/2009 00:00:00,这意味着事件在10/5/2009 00:00:00和10/5/2009 23:59:59之间结束。对于开始日期也是如此。因此,输入日期范围也可以解释为01/04/2009 00:00:00 - 30/06/2009 23:59:59。