SQL Server 2008查询出勤时间输入和超时

时间:2017-01-04 06:10:47

标签: sql-server sql-server-2008-r2

我有一张包含以下示例的表格

EmployeeID | Employee | PunchDate
---------------------------------------
    11     | Sujith   | 22/12/2016 08:16:00
    11     | Sujith   | 22/12/2016 13:35:00
    11     | Sujith   | 22/12/2016 17:23:00
    11     | Sujith   | 22/12/2016 21:09:00
    12     | Tony     | 22/12/2016 14:06:00
    12     | Tony     | 22/12/2016 22:39:00
    13     | Jimmy    | 22/12/2016 08:00:00
    13     | Jimmy    | 22/12/2016 17:12:00
    14     | Nitha    | 22/12/2016 18:50:00
    14     | Nitha    | 23/12/2016 07:05:00 

我想为以下结果构建一个查询:

EmployeeID|Name     |DutyTimeIn           |DutyTimeOut          |WorkingHours
 ----------------------------------------------------------------------------
    11    |Sujith   |22/12/2016 08:16:00  |22/12/2016 13:35:00  |05:19
    11    |Sujith   |22/12/2016 17:23:00  |22/12/2016 21:09:00  |03:46
    12    |Tony     |22/12/2016 14:06:00  |22/12/2016 22:39:00  |08:33
    13    |Jimmy    |22/12/2016 08:00:00  |22/12/2016 17:12:00  |09:12
    14    |Nitha    |22/12/2016 18:50:00  |23/12/2016 07:05:00  |12:15

1 个答案:

答案 0 :(得分:0)

;with cte as
(
select *,((row_number()over(partition by [ID] order by [DATE]) - 1 )/2) as rn from #d
)
select id,name,min([DATE])[DATE],max([DATE])[NXTDATE],
 CAST(DateDiff(MI, min([DATE]), max([DATE]))/60 AS varchar)+':'+Cast(DateDiff(MI, min([DATE]), max([DATE]))%60 AS varchar)+':'+cast(DateDiff(s, min([DATE]), max([DATE]))%60 AS varchar) as [hh:mm:ss]
from cte 
group by id,name,rn  

output
id  name    DATE    NXTDATE hh:mm:ss
11  Sujith  2016-12-22 08:16:00.000 2016-12-22 13:35:00.000 5:19:0
11  Sujith  2016-12-22 17:23:00.000 2016-12-22 21:09:00.000 3:46:0
12  Tony    2016-12-22 14:06:00.000 2016-12-22 22:39:00.000 8:33:0
13  Jimmy   2016-12-22 08:00:00.000 2016-12-22 17:12:00.000 9:12:0
14  Nitha   2016-12-22 18:50:00.000 2016-12-23 07:05:00.000 12:15:0