【发布时间】:2009-06-22 06:18:34
【问题描述】:
我的数据库中有以下一组日期 (dd/MM/yyyy) 匹配事件:
eventId startDate endDate 1 2009 年 2 月 5 日 2009 年 10 月 5 日 2 2009 年 8 月 5 日 2009 年 12 月 5 日 3 2009 年 10 月 5 日 2009 年 12 月 5 日 4 2009 年 5 月 21 日 2009 年 5 月 21 日 5 25/05/2009 空 6 2009 年 1 月 6 日 2009 年 3 月 6 日事件有开始和结束日期(时间无关紧要),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 无事件:2009 年 5 月 13 日 - 2009 年 5 月 20 日 无事件: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。
【问题讨论】:
-
您将在哪个数据库平台上运行此查询?
标签: sql sql-server algorithm tsql