SQL Server:在多个夜班中获取开始时间和结束时间

时间:2017-12-12 22:09:07

标签: sql sql-server

如何获取此列表的开始和结束时间?我可以在这个时间添加日期,并且可以按最小和最大值获得,但是你可以看到row 3有第二天的班次,但它会在相同的日期,因为它是夜班

我添加了正常的白班员工也获得了正确的逻辑

EmployeeId  ShiftDate   ShiftStartTime  ShiftEndTime
-----------------------------------------------------
20040       2017-11-01  21:00:00        23:00:00
20040       2017-11-01  23:00:00        00:30:00
20040       2017-11-01  00:30:00        06:00:00
20124       2017-11-01  09:00:00        16:30:00
20124       2017-11-01  16:30:00        22:00:00
20124       2017-11-01  22:00:00        22:30:00

我需要它如下:

EmployeeId  ShiftDate   ShiftStartTime  ShiftEndTime
----------------------------------------------------
20040       2017-11-01  21:00:00        06:00:00
20124       2017-11-01  09:00:00        22:30:00

1 个答案:

答案 0 :(得分:0)

在商业环境中,我们通过在每个班次上附加FLAG来解决这个问题。该标志将指示“报告日期”' Shift ...如果报告/管理日期为'则标志的值为1。是下一个'天。 0表示同一天。前一天的-1(我们从未使用过......取决于您的情况)

我修改了你的表以显示一个可能的SHIFTS表,我猜也应该有一个NAME列(如早晨,下午,白天,夜班等)

ReportFlag ShiftStartTime  ShiftEndTime
1         21:00:00        23:00:00
1         23:00:00        00:30:00
0         00:30:00        06:00:00
0         09:00:00        16:30:00
0         16:30:00        22:00:00
1         22:00:00        22:30:00

注意我是如何加1的 - 说这个转变'实际上被认为是在下一个'一天。

然后你可以使用你的标志值0,1来添加你的查询中的DATE函数