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

求SQL按年月分组实现剩余加班时长计算(基于Lag函数)

实现剩余加班时长计算的SQL语句

核心思路

要按Year和Month分组递推计算剩余加班时长,无需使用LAG()函数,直接通过累计窗口函数计算累计使用时长,再用初始值(15.5)减去累计值即可得到当前行的剩余时长,逻辑更简洁稳定。

假设表结构

假设你的加班记录表名为overtime_records,包含以下字段:

  • year:年份
  • month:月份
  • number_of_used:当月已使用的加班时长
  • record_seq:记录的顺序标识(用于确定行的计算先后,若没有该字段,可替换为实际的排序字段如记录日期record_date)

最终SQL语句

SELECT
    year,
    month,
    number_of_used,
    -- 初始剩余15.5减去当前行及之前的累计使用时长,得到当前剩余
    15.5 - SUM(number_of_used) OVER (
        PARTITION BY year, month 
        ORDER BY record_seq 
        ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
    ) AS number_of_left
FROM overtime_records
ORDER BY year, month, record_seq;

语句说明

  1. PARTITION BY year, month:将数据按年份和月份分组,每个分组内独立计算剩余时长
  2. ORDER BY record_seq:指定分组内行的计算顺序,确保累计逻辑的正确性(必须有明确的排序字段,否则行顺序随机会导致结果错误)
  3. SUM(number_of_used) OVER (...):计算从分组第一行到当前行的累计已使用加班时长
  4. 15.5 - 累计值:得到当前行的剩余可使用加班时长,完全匹配你描述的递推逻辑(第一行15.5-1=14.5,第二行15.5-(1+2)=12.5,以此类推)

内容的提问来源于stack exchange,提问作者Poslovna Podrška

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 23:46:05