我有一个 100K 行的表,代表特定时间段内的销售额。通常这些周期至少有几个小时,但有时我们会得到一个只有几分钟的周期。这些微小的时期扰乱了下游报告,所以我想将它们与前一个时期合并。任何 30 分钟或更短的时间段都应与上一个时间段合并,并在各个时间段内汇总销售数据。长周期之间可能有零个、一个或多个后续短周期。数据中没有时间间隔——一个时期的开始总是与前一个时期的结束相同。
执行此合并的基于集合的好方法(没有光标!)是什么?
现有数据(简化)如下所示:
UnitsSold Start End
---------------------------------------------------
10 06-12-2013 08:03 06-12-2013 12:07
12 06-12-2013 12:07 06-12-2013 16:05
1 06-12-2013 16:05 06-12-2013 16:09
1 06-12-2013 16:09 06-12-2013 16:13
7 06-12-2013 16:13 06-12-2013 20:10
所需的输出如下所示:
UnitsSold Start End
---------------------------------------------------
10 06-12-2013 08:03 06-12-2013 12:07
14 06-12-2013 12:07 06-12-2013 16:13
7 06-12-2013 16:13 06-12-2013 20:10
不幸的是,我们仍在使用 SQL Server 2008 R2,因此我们无法利用 SQL Server 2012 中很酷的新窗口函数,这可能会使这个问题更容易有效地解决。
在 SQL 中合并相邻行中对类似问题进行了很好的讨论?. 我特别喜欢 PIVOT/UNPIVOT 解决方案,但我不知道如何使它适应我的问题。