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

基于PTO_FLAG字段排除记录的SQL加班时长计算问题

解决PTO_FLAG=1时排除工时的加班计算问题

核心思路是在计算周累计工时的时候,把PTO_FLAG=1的记录工时替换为0,这样就不会计入累计统计。修改后的SQL如下:

SUM(CASE WHEN PTO_FLAG != 1 THEN HOURS ELSE 0 END) 
    OVER (
        PARTITION BY YRWKINDEX, EMPLOYEE_ID 
        ORDER BY WORK_DATE asc
    ) AS WK_TO_DATE_HOURS,
CASE
    WHEN WK_TO_DATE_HOURS > 40 THEN WK_TO_DATE_HOURS - 40
    ELSE 0
END AS WTD_OVERTIME_HOURS,
CASE
    WHEN (WK_TO_DATE_HOURS - 40) < 0 THEN 0 
    WHEN (WK_TO_DATE_HOURS - 40) < HOURS THEN WK_TO_DATE_HOURS - 40
    WHEN (WK_TO_DATE_HOURS - 40) > 0 AND (WK_TO_DATE_HOURS - 40) > HOURS THEN HOURS
END AS OVERTIME_HOURS

关键修改说明

  • WK_TO_DATE_HOURS计算:通过CASE WHEN判断,只要PTO_FLAG=1,该日的HOURS就按0计算,彻底排除休假/事假天数的工时累计。
  • 后续加班计算:因为周累计工时已经过滤了休假记录,后面的WTD_OVERTIME_HOURS和OVERTIME_HOURS逻辑不需要额外修改,就能自动基于有效工时计算加班。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 05:42:37