获取连续11天没有打卡的员工
P粉103739566
P粉103739566 2023-08-18 09:31:19
[MySQL讨论组]

我正在尝试从数据库中获取连续11天没有标记出勤的员工, 为此我有员工表和出勤表,但是我在这方面遇到的问题是出勤表中没有记录,所以我该如何获取

我尝试了很多查询,其中一些如下:

SELECT e.name, e.full_name
FROM tabEmployee e
LEFT JOIN (
    SELECT 
        employee,
        MIN(attendance_date) AS first_attendance_date
    FROM tabAttendance
    GROUP BY employee
) ar ON e.name = ar.employee
WHERE ar.first_attendance_date IS NULL OR 
      NOT EXISTS (
          SELECT 1
          FROM tabAttendance
          WHERE employee = e.name
          AND attendance_date >= ar.first_attendance_date
          AND attendance_date < DATE_ADD(ar.first_attendance_date, INTERVAL 11 DAY)
      )

另一个查询:

SELECT e.name, COUNT(a.`attendance_date`), COUNT(e.`name`) from tabEmployee e
LEFT JOIN tabAttendance a ON e.name = a.`employee`
WHERE a.`employee` IS NULL
GROUP BY e.`name`


P粉103739566
P粉103739566

全部回复(1)
P粉231079976

使用 LAG() 分析函数,我们可以尝试:

WITH cte AS (
    SELECT e.name, e.full_name,
           LAG(a.attendance_date) OVER (PARTITION BY a.employee
                                        ORDER BY a.attendance_date) AS lag_attendance_date
    FROM tabAttendance a
    INNER JOIN tabEmployee e ON e.name = a.employee
)

SELECT DISTINCT name, full_name
FROM cte
WHERE DATEDIFF(attendance_date, lag_attendance_date) > 11;

这里的基本策略是在 CTE 中生成出勤日期的 lag(前一个连续值)。然后我们只报告有 11 天或更长间隔的员工。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号