【发布时间】:2015-10-28 06:55:11
【问题描述】:
我有下表:
Plan Start Date End Date Order
------------------------------------------
1 1st Jan, 2014 31st Jan, 2014 1
1 1st Feb, 2014 24th Feb, 2014 2
1 25th Feb, 2014 30th Jun, 2014 3
1 7th Jul, 2014 28th Aug, 2014 4
1 1st Sep, 2014 30th Sep, 2014 5
1 1st Oct, 2014 31st Dec, 2014 6
从上面的数据可以看出,对于计划 1,订单 1,2,3 是连续的,那么我们有一个缺口,然后是订单 4,然后又是一个缺口,然后是订单 5,6 是连续的。对于计划 1,我想将覆盖范围捆绑如下:(1,2,3),(4),(5,6),预期结果集应如下所示:
Plan Start Date End Date
-------------------------------------
1 1st Jan, 2014 30th Jun, 2014
1 7th Jul, 2014 28th Aug, 2014
1 1st Sep, 2014 31st Dec, 2014
我使用了一个基本的 while 循环迭代逻辑来实现我想要的输出。但是,当有大量记录(比如 100 万条)时,while 循环逻辑的性能会受到很大影响(因为它是逐行操作)。我尝试提出一种基于递归 CTE 的方法,但无法获得预期的结果。在这种情况下,任何可以使用批处理逻辑的输入都将非常有用。
【问题讨论】:
标签: sql-server-2008 date while-loop sequence common-table-expression