集体上下班考勤查询

问题描述 投票:0回答:1

我有考勤表:

EmpId 日期输入 Att类型
E-0001 2024-01-01 08:00:02
E-0001 2024-01-01 17:01:00
E-0002 2024-01-01 07:59:02
E-0002 2024-01-01 17:00:07

如何查询此表:

日期输入 EmpID 打卡上班 下班
2024-01-01 E-0001 08:00:02 17:01:00
2024-01-01 E-0002 07:59:02 17:00:07

其中 ClockIn/ClockOut 基于 AttType(当“IN”时然后 ClockIn,当“OUT”时然后 ClockOut)

我尝试了这个查询:

SELECT EmpID,
       DateEntry,
       CASE
           WHEN AttType = 'IN' THEN DateEntry
           ELSE NULL
       END AS ClockIn,
       CASE
           WHEN AttType = 'OUT' THEN DateEntry
           ELSE NULL
       END AS ClockOut
FROM Attendance
GROUP BY EmpID,
         DateEntry; 

但结果是:

日期输入 EmpID 打卡上班 下班
2024-01-01 E-0001 08:00:02
2024-01-01 E-0001 17:01:00
2024-01-01 E-0002 07:59:02
2024-01-01 E-0002 17:00:07

如何得到正确的结果?有人可以帮助我吗?谢谢你。

sql mysql grouping
1个回答
0
投票

这可以通过使用聚合函数基于日期部分的条件聚合来完成

MAX()
:

SELECT EmpID,
       DATE(DateEntry) AS DateEntry,
       MAX(CASE
           WHEN AttType = 'IN' THEN TIME(DateEntry)
           ELSE NULL
       END) AS ClockIn,
       MAX(CASE
           WHEN AttType = 'OUT' THEN TIME(DateEntry)
           ELSE NULL
       END) AS ClockOut
FROM Attendance
GROUP BY EmpID,
         DATE(DateEntry); 

演示在这里

© www.soinside.com 2019 - 2024. All rights reserved.