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;
此外,建议在您的 PunchTime table 中使用 EmpID(数字索引)。目前,该关系位于文本字段上。 Employee.employeeName <> Punch_Time.empId NOT ADVISED
我正在尝试 运行 查询以获取员工每月打卡和打卡的数据。问题是打孔(进出)都在同一列中。 我有两个表 '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;
此外,建议在您的 PunchTime table 中使用 EmpID(数字索引)。目前,该关系位于文本字段上。 Employee.employeeName <> Punch_Time.empId NOT ADVISED