sql查询连续三天没打卡的人
时间: 2024-09-23 08:05:16 浏览: 40
oracle常用经典sql查询.doc
SQL查询连续三天未打卡的人员通常需要结合日期字段和员工打卡记录来进行。假设有一个名为`attendance_records`的表,它有`employee_id`(员工ID),`check_in_date`(打卡日期)等字段,你可以使用下面的查询示例:
```sql
SELECT a1.employee_id
FROM attendance_records a1
LEFT JOIN (
SELECT employee_id, check_in_date
FROM attendance_records
WHERE check_in_date = DATE_SUB(CURDATE(), INTERVAL 3 DAY) -- 第一天
) a2 ON a1.employee_id = a2.employee_id AND DATEDIFF(a1.check_in_date, a2.check_in_date) = 1 -- 检查间隔为1天
LEFT JOIN (
SELECT employee_id, check_in_date
FROM attendance_records
WHERE check_in_date = CURDATE() - INTERVAL 2 DAY -- 第二天
) a3 ON a1.employee_id = a3.employee_id AND DATEDIFF(a1.check_in_date, a3.check_in_date) = 1
WHERE a2.employee_id IS NULL AND a3.employee_id IS NULL;
```
这个查询首先找出所有在三天前、两天前以及当天都有打卡记录的员工 (`a2` 和 `a3`),然后从原始记录中筛选出那些在这三天内都没有相应打卡记录的员工 (`a1`)。
阅读全文