2017-09-06 52 views
0

我想做一个报告,计算夜班员工的休息时间。但有一个问题。假设夜班时间是从晚上9点到第二天早上6点。根据该计划出席细节如下,如果员工不休息一下这是很容易计算checkout1和checkout2的工作差的持续时间夜班员工休息时间创建多个记录

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

当他在移位一个需要休息的2AM新记录被创建。由于有多个记录,我不能够计算工作时间。请帮助

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 
+0

从开始时间减去几个小时,以获得从同一日期和组开始的两行。使用标准SQL:'cast(checkin - interval'6'hours as date)' – dnoeth

+0

我正在寻找一个水晶报表解决方案,其中雇员的小时(first_in)> = 21(9PM)时间应该是第一条记录的签入差异并结算第二笔记录。类似的休息时间差应该是第一笔记录的签出和第二笔签到 – Rameel

回答

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 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点开始减少工作时间会给你休息时间。

+0

Madhukar ...我将如何计算从凌晨2点到凌晨2:30的休息时间? – Rameel