小编use*_*335的帖子

SQL:查找多行的连续日期范围?

我正在努力获得一个开始和结束日期组合,以便连续工作时间跨度.跨距可以跨越多行,其中第一行的结束日期与下一行的结束日期相同.预期结果是显示连续日期范围,其中包含该范围的工作小时数.

person  startdate                enddate                   hours
------  -----------------------  -----------------------  ------
5163    2013-04-29 07:00:00.000  2013-04-29 11:00:00.000    4.00
5163    2013-04-29 11:30:00.000  2013-04-29 15:30:00.000    4.00
5163    2013-04-29 15:30:00.000  2013-04-29 19:06:00.000    3.60
5851    2013-05-02 19:00:00.000  2013-05-02 23:00:00.000    4.00
5851    2013-05-02 23:00:00.000  2013-05-03 00:00:00.000    1.00
5851    2013-05-03 00:00:00.000  2013-05-03 00:31:00.000    0.52
Run Code Online (Sandbox Code Playgroud)

从以上数据,我想要以下内容.

person  startdate                enddate                   hours
------  -----------------------  -----------------------  ------
5163    2013-04-29 07:00:00.000  2013-04-29 11:00:00.000    4.00
5163    2013-04-29 11:30:00.000  2013-04-29 19:06:00.000    7.60
5851    2013-05-02 19:00:00.000  2013-05-03 00:31:00.000    5.52
Run Code Online (Sandbox Code Playgroud)

对于每个人和新的(非连续)日期范围,将当前行的enddate与下一行的startdate进行比较.如果它们相同,则累积小时数并继续处理行,直到enddate/startdate不相等.

环境是SQL Server 2008 R2.我使用row_number和partition()函数尝试了涉及自联接的查询,但是无法获得成功的解决方案.谢谢!

编辑:这是RichardTheKiwi解决方案的数据流 - 我为一个人运行它,看看为一周的价值冲击产生了多少递归. …

t-sql sql-server sql-server-2008 sql-server-2008-r2

6
推荐指数
1
解决办法
8150
查看次数