如何从考勤日志中生成第一个IN和最后一个OUT

时间:2019-07-05 07:33:50

标签: sql sql-server tsql

我有一个现有的出勤记录,我想根据日期获取每个员工的第一个进场和最后一个出场,这是什么查询?

已经尝试使用MAX()和MIN()函数

下面的示例数据

username              date    time
----------------------------------------
user1                07-01-2019 7:20:00
user1                07-01-2019 7:25:00
user2                07-01-2019 7:40:00
user2                07-01-2019 7:42:00
user3                07-01-2019 7:45:00
user3                07-01-2019 7:47:00
user1                07-01-2019 12:00:00
user1                07-01-2019 12:15:00
user2                07-01-2019 12:15:00
user2                07-01-2019 12:40:00
user3                07-01-2019 12:20:00
user3                07-01-2019 12:25:00
user1                07-03-2019 7:20:00
user1                07-03-2019 7:25:00
user2                07-03-2019 7:40:00
user2                07-03-2019 7:42:00
user3                07-03-2019 7:45:00
user3                07-03-2019 7:47:00
user1                07-03-2019 12:00:00
user1                07-03-2019 12:15:00
user2                07-03-2019 12:15:00
user2                07-03-2019 12:40:00
user3                07-03-2019 12:20:00
user3                07-03-2019 12:25:00

从测试中选择[用户名],concat([日期],'',[时间])作为inout,其中[用户名]!=''由inout asc排序  通过inout desc从测试顺序中选择[用户名],concat([date],'',[time])作为inout

我希望下面的输出

username                    date    timeIn          timeOut
--------------------------------------------------------------
user1                      07-01-2019 7:20:00       12:15:00
user2                      07-01-2019 7:40:00       12:40:00
user3                      07-01-2019 7:45:00       12:25:00
user1                      07-03-2019 7:20:00       12:00:00
user2                      07-03-2019 7:40:00       12:40:00
user3                      07-03-2019 7:45:00       12:25:00

1 个答案:

答案 0 :(得分:3)

尝试(未测试)

SELECT
    username,
    date,
    MIN(time) AS timeIn,
    MAX(time) AS timeOut
FROM
   test
GROUP BY
    username,
    date
ORDER BY
    username,
    date

假设您要在同一日期超时和超时。