MySQL 获取员工的打卡和打卡数据

MySQL fetch Punch in and punch out data of employee

我正在尝试 运行 查询以获取员工每月打卡和打卡的数据。问题是打孔(进出)都在同一列中。 我有两个表 'employee' 和 'punch_time' 如下

Table 员工:

Id employee name
1 emp1
2 emp2
3 emp3

Table,共 Punch_time:

PunchId empId punchTime
1 emp1 2022-05-01 10:02:25
2 emp2 2022-05-01 10:00:23
3 emp3 2022-05-01 18:15:04
4 emp1 2022-05-01 18:10:25
5 emp2 2022-05-01 18:00:00
6 emp1 2022-05-02 10:00:05
7 emp2 2022-05-02 10:10:15
8 emp1 2022-05-02 18:02:25
9 emp2 2022-05-02 18:02:25

我需要如下结果:

emp. Date In. Out.
emp1 2022-05-01 10:02:25 18:10:25
emp2 2022-05-01 10:23:00 18:00:00
emp3 2022-05-01 18:15:04
emp1 2022-05-02 10:00:05 18:02:25
emp2 2022-05-02 10:10:15 18:02:25
emp3 2022-05-02
emp1 2022-05-03
emp2 2022-05-03
emp3 2022-05-03

这是获取所需记录的方法。唯一缺少的是它没有显示缺勤行。

SELECT
    e.employeeName emp,
    CAST(punchTime AS DATE) punchDate,
    TIME(min(punchTime)) InTime,
    if(max(punchTime)=min(punchTime),null,TIME(max(punchTime))) OutTime
FROM Employee e
JOIN Punch_time p ON e.employeeName = p.empId
GROUP BY punchDate, empId;

FIDDLE LINK

此外,建议在您的 PunchTime table 中使用 EmpID(数字索引)。目前,该关系位于文本字段上。 Employee.employeeName <> Punch_Time.empId NOT ADVISED