You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL同表子查询:跨天打卡Clock_In与次日Clock_Out关联查询需求

MySQL同表关联解决跨天打卡补全问题

这里提供两种可行的解决方案,适配不同版本的MySQL:

方案一:兼容MySQL 5.x及以上的自关联写法

SELECT
    a.Emp_ID,
    a.Date_Entry,
    a.Clock_In,
    CASE
        -- 提取打卡时间的时分秒部分,判断是否晚于等于22:00
        WHEN a.Clock_In IS NOT NULL AND TIME(a.Clock_In) >= '22:00:00' THEN b.Clock_Out
        ELSE a.Clock_Out
    END AS Clock_Out
FROM employee_attendance a
LEFT JOIN employee_attendance b
    ON a.Emp_ID = b.Emp_ID
    AND b.Date_Entry = DATE_ADD(a.Date_Entry, INTERVAL 1 DAY)
ORDER BY a.Date_Entry;

逻辑说明:通过自关联将当前员工的当日记录与次日记录绑定,当当日打卡时间≥22:00时,替换为次日的下班时间,否则保留原下班时间。

方案二:MySQL 8.0+ 可用的窗口函数写法

SELECT
    Emp_ID,
    Date_Entry,
    Clock_In,
    CASE
        WHEN Clock_In IS NOT NULL AND TIME(Clock_In) >= '22:00:00' THEN LEAD(Clock_Out) OVER (PARTITION BY Emp_ID ORDER BY Date_Entry)
        ELSE Clock_Out
    END AS Clock_Out
FROM employee_attendance
ORDER BY Date_Entry;

逻辑说明:利用LEAD()窗口函数,按员工分组、日期排序,直接获取当前记录的下一条记录的下班时间,代码更简洁,查询效率更高。

两种方案都能输出你预期的结果,可根据你的MySQL版本选择合适的写法。

内容的提问来源于stack exchange,提问作者Pramono

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 06:44:52