夜班员工打破时间创建多个记录

时间:2017-09-06 09:16:05

标签: sql crystal-reports

我正在尝试制作一份计算夜班员工休息时间的报告。但是有问题。让我们说夜班时间是从第二天早上9点到早上6点。根据该计划,如果员工没有休息,并且很容易计算checkout1和checkout2工作差异的持续时间,则考勤详情如下:

emp_num   checkin1                   checkout1                   
81111     2014-08-21 21:38:06.000    2014-08-22 06:00:10.000    

当他在班次凌晨2点休息时,会创建一条新记录。由于有多个记录,我无法计算工作的持续时间。请帮助

emp_num   checkin1                   checkout1                   
81111     2014-08-21 21:38:06.000    2014-08-22 02:00:10.000        
81111     2014-08-22 02:30:00.000    2014-08-22 06:00:10.000

1 个答案:

答案 0 :(得分:0)

我创建了一个临时表并上传了您的数据。

create table #employee (EmpID int, CheckIn Datetime, CheckOut Datetime, HoursWorked time)

然后我插入了如下所示的数据。

EmpID   CheckIn                    CheckOut
1       2014-08-21 21:38:06.000    2014-08-22 06:00:10.000    
2       2014-08-21 21:38:06.000    2014-08-22 02:00:10.000        
2       2014-08-22 02:30:00.000    2014-08-22 06:00:10.000

我将HoursWorked列更新为

update #employee set HoursWorked = CheckOut - CheckIn

下面的select语句给出了所需的输出。

SELECT EmpID,SUM(DATEPART(HOUR,hoursworked))AS HoursWorked, 
            SUM(DATEPART(MINUTE,hoursworked))AS MinutesWorked,
            SUM(DATEPART(SECOND,hoursworked))AS SecondsWorked FROM #employee
GROUP BY EmpID

EmpID   HoursWorked  MinutesWorked  SecondsWorked
1       8            22             4
2       7            52             14

如果有任何错误或捷径,请告诉我。从9开始的工作时间为您提供休息时间。

相关问题