我正在尝试运行查询来获取员工按月打卡和打卡的数据。问题是两个冲孔(进出)都在同一列中。 我有两个表“employee”和“punch_time”,如下
员工表:
身份证 | 员工姓名 |
---|---|
1 | emp1 |
2 | emp2 |
3 | emp3 |
打卡时间表:
打孔ID | empId | 打卡时间 |
---|---|---|
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 |
我需要如下结果:
空。 | 日期 | 在。 | 出去。 |
---|---|---|---|
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 表中使用 EmpID(数字索引)。目前该关系位于文本字段上。 Employee.employeeName <> Punch_Time.empId
NOT ADVISED
select EmpId,
[Punch-In],
[Punch-Out],
DATEDIFF(SECOND, [Punch-In], [Punch-Out]) AS INTIME
来自 ( 选择员工 ID, [打卡], Lead([Punch-Out]) OVER(按 EMPID 排序)AS [Punch-Out] 从 ( 选择 EmpId, [打卡], [打孔] 从 ( 选择案例 当 LEN(pin) = 1 时 “00”+ 引脚 当 LEN(pin) = 2 时 “0”+ 引脚 别的 别针 结束 AS EmpId, 名称为 EmpName, event_time 作为打卡时间, 案件 当 reader_name LIKE '%-%in%' 时 “打卡” 别的 “冲出” END AS 打孔类型, id AS 交易Id, 日期名称(dw,event_time)作为日 FROM [acc_transaction] AND (NOLOCK) WHERE 格式(event_time, 'yyyy-MM-dd') = '2024-01-04' 和引脚 = '3573' AND ISNULL(pin, '') <> '' AND NULLIF(PIN, '') IS NOT NULL 并且别针不喜欢“%hk%” 并且名称不像“%temp%” 并且名称不像“%security%” 并且别针不喜欢's%' 并且别针不喜欢“t%” 并且别针不像“c%” 并且名称不像“test%” AND event_no NOT IN ( 27, 23 ) AND event_point_name NOT IN ( '3A_Server_Room', 'CWF Z2 服务器机房', 'CWF Z2 到 Z3', '3F 服务器机房'、'CWF Z3 至 Z4'、'CWF Z3 枢纽机房'、'CWFZ2 - 2-1'、 “CWFZ2 - 2-2”、“Mys 服务器机房” ) --按事件时间升序排列 ) AS 源表 枢 ( MIN(打卡时间) FOR 打孔类型输入 ([打入], [打出]) ) 作为枢轴 )B ) C 在哪里 ( [打卡] 不为空 或 [Punch-Out] 不为空 )