我正在努力获得一个开始和结束日期组合,以便连续工作时间跨度.跨距可以跨越多行,其中第一行的结束日期与下一行的结束日期相同.预期结果是显示连续日期范围,其中包含该范围的工作小时数.
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解决方案的数据流 - 我为一个人运行它,看看为一周的价值冲击产生了多少递归. …