每个员工在相关日期的第一次上次时间

时间:2018-01-08 14:29:36

标签: sql-server

我有以下表格,我想从中提取计算的时间。我希望每个员工每天花费的时间。

CREATE TABLE Attendance 
(
     , EmpID INT
     , TimeIn datetime
     , TimeOut datetime
)

下面列出了我对此表的样本记录。

 EmpID | AttendanceTimeIN  |  AttendanceTimeOut
 1       2017-04-01 9:00:00   2017-04-01 10:20:00
 2       2017-04-01 9:00:00   2017-04-01 12:30:00 
 1       2017-04-01 10:25:00  2017-04-01 17:30:00 
 2       2017-04-01 13:26:00  2017-04-01 14:50:00 
 2       2017-04-01 15:00:00  2017-04-01 18:00:00 
 1       2017-04-02 9:00:00   2017-04-02 11:00:00 
 1       2017-04-02 11:10:00  2017-04-02 12:00:00 
 2       2017-04-02 9:00:00   2017-04-02 12:00:00 
 1       2017-04-02 12:50:00  2017-04-02 18:00:00 
 2       2017-04-02 12:51:00  2017-04-02 18:00:00   

我想获得每天的First TimeIn和Last TimeOut以及员工每天计算特定员工在办公室花费的时间。 我有点困惑,如何使用Min / Max功能,这样我每天都可以获得两个员工的工作时间。 我正在寻找的结果集应该是这样的。

 EmpID | AttendanceTimeIN  |  AttendanceTimeOut
 1       2017-04-01 9:00:00   2017-04-01 17:30:00
 2       2017-04-01 9:00:00   2017-04-01 18:00:00 
 1       2017-04-02 9:00:00   2017-04-02 18:00:00 
 2       2017-04-02 9:00:00   2017-04-02 18:00:00

任何帮助都将受到高度赞赏。 谢谢

1 个答案:

答案 0 :(得分:1)

如果您的TimeIn和TimeOut是日期时间类型(它们应该是!),此解决方案适用于我所做的测试:

SELECT
    EmpID
    , MIN(TimeIn)
    , MAX(TimeOut)
FROM Attendance
GROUP BY EmpID, CAST(TimeIn AS DATE)

GROUP BY子句意味着每个员工每天都有一行,因为CASTDATE摆脱了时间部分。 MINMAX然后就固有地工作了。