如何编写SQL查询特定日期未打卡员工的编号、部门及缺勤日期
表结构说明
- Employee_Info(员工基础信息表):存储所有在职员工的基础数据,包含字段
Employee_no(员工号)、Name(姓名)、Department(所属部门) - Attendance(考勤打卡表):仅留存已完成打卡员工的记录,包含字段
Employee_no(员工号)、Attendance_Date(打卡日期)
实现逻辑
要筛选指定日期未打卡的员工,本质是找出所有在员工基础表中存在、但在目标日期的打卡记录表中不存在的员工,以下提供两种通用实现方案。
具体SQL代码
方案1:左连接过滤(推荐,兼容性&性能更稳定)
SELECT e.Employee_no, e.Department, '06/25/2021' AS Absent_on -- 此处替换为需要查询的指定缺勤日期即可 FROM Employee_Info e LEFT JOIN Attendance a ON e.Employee_no = a.Employee_no AND a.Attendance_Date = '06/25/2021' -- 与上方指定日期保持一致 WHERE a.Employee_no IS NULL;
如果你的数据库中日期存储为标准YYYY-MM-DD格式,直接将上述日期参数替换为对应格式即可,比如'2021-06-25'。
方案2:NOT IN实现
SELECT Employee_no, Department, '06/25/2021' AS Absent_on FROM Employee_Info WHERE Employee_no NOT IN ( SELECT DISTINCT Employee_no FROM Attendance WHERE Attendance_Date = '06/25/2021' );
注意:如果Attendance表的Employee_no字段可能存在NULL值,NOT IN会返回空结果,该场景请勿使用方案2。
输出效果
运行后结果格式与要求一致:
Employee_no Department Absent_on 10160100000 XYZ 06/25/2021
内容的提问来源于stack exchange,提问作者xajid
相关产品推荐
相关产品推荐

