【问题标题】:SQL Server 2008 Query for attendance time In and time OutSQL Server 2008 查询出勤时间 In 和 Time Out
【发布时间】:2017-01-04 06:10:46
【问题描述】:

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

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

【问题讨论】:

  • 请说明您尝试过的对您不起作用的方法。
  • 应该为您的问题发布实际代码。有很多方法可以解决您的问题。
  • 你能检查我的答案吗

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


【解决方案1】:
;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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-20
    • 2019-08-10
    • 2018-12-23
    • 1970-01-01
    • 2020-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多