【发布时间】:2015-01-16 03:00:06
【问题描述】:
我有下表:
startDate endDate
----------------------
01-01-2014 01-07-2014
01-08-2014 01-14-2014
01-15-2014 01-21-2014
01-28-2014 02-03-2014
02-04-2014 02-10-2014
我想将日期捆绑在一起以尽量减少记录数量。输出结果应如下所示:
startDate endDate
----------------------
01-01-2014 01-21-2014
01-28-2014 02-10-2014
如果一个记录的 startDate 比另一个记录的 endDate 晚一天,则日期可以链接在一起。
不使用游标可以实现吗?
【问题讨论】:
-
当日期范围连续时,开始日期是否总是比另一条记录的结束日期晚一天?或者日期范围可以重叠,您也想捆绑这些吗?
-
我相信这可以通过窗口函数 + 递归 CTE 实现,但我对这些功能的练习还不够,无法让它发挥作用。
-
是的,我相信使用窗口函数 + CTE 是可能的。也可以使用 while 循环,尽管这可以被认为类似于游标。请记住光标并不总是坏的。只有当存在“更好”的基于集合的解决方案时,它们才会变得糟糕
-
天数不重叠,但可以存在重复记录。
-
经过一些性能测试后,使用游标的替代方案似乎不像以前那么糟糕了。
标签: sql sql-server