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

SQL查询员工各考勤段上下班时间及打卡次数实现方案

修改方案

你目前的SQL已经通过rn1 - rn2正确划分了同一个员工的连续考勤段,只需要在最终查询的SELECT子句中新增COUNT(*)统计每个分组的总行数即可,对应就是当前考勤段的打卡总次数。同时为了匹配你给出的预期结果格式,补充了结果表的自增序号id字段。

修改后完整SQL

WITH cte AS 
(
    SELECT 
        *, 
        ROW_NUMBER() OVER (ORDER BY DateP, TimeP) rn1,
        ROW_NUMBER() OVER (PARTITION BY EmployeeID ORDER BY DateP, TimeP) rn2
    FROM 
        EmployeeTable
),
cte2 AS 
(
    SELECT 
        *, 
        ROW_NUMBER() OVER (PARTITION BY EmployeeID, rn1 - rn2
                           ORDER BY DateP, TimeP) rn_first,
        ROW_NUMBER() OVER (PARTITION BY EmployeeID, rn1 - rn2
                           ORDER BY DateP DESC, TimeP DESC) rn_last
    FROM 
        cte
)
SELECT
    ROW_NUMBER() OVER (ORDER BY MIN(DateP), MIN(TimeP)) AS id,
    EmployeeID,
    MAX(CASE WHEN rn_first = 1 THEN DateP END) AS MinDateP,
    MAX(CASE WHEN rn_first = 1 THEN TimeP END) AS TimeMinDateP,
    MAX(CASE WHEN rn_last = 1  THEN DateP END) AS MaxDateP,
    MAX(CASE WHEN rn_last = 1  THEN TimeP END ) AS TimeMaxDateP,
    COUNT(*) AS Count -- 新增的考勤段打卡次数统计字段
FROM 
    cte2
GROUP BY
    EmployeeID,
    rn1 - rn2
ORDER BY
    MIN(DateP), MIN(TimeP);

如果不需要预期结果里的自增id列,删掉SELECT子句中对应的ROW_NUMBER() AS id行即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 08:24:03