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

SQL实现叉车培训通过人数累计统计(指定日期+工作日过滤)

解决叉车培训累计通过人数统计的SQL方案

核心思路

先筛选出2023-01-26及之后的所有工作日,再针对每个工作日统计截至当天的累计通过人数,用窗口函数能高效实现累计求和逻辑。

完整SQL代码

SELECT 
    t1.date AS work_date,
    SUM(COALESCE(t2.training_passed, 0)) OVER (ORDER BY t1.date) AS cumulative_passed
FROM 
    table1 t1
LEFT JOIN 
    table2 t2 ON t2.exam_date <= t1.date
WHERE 
    t1.is_work_day = 1
    AND t1.date >= '2023-01-26'
GROUP BY 
    t1.date
ORDER BY 
    t1.date;

代码细节解释

  • 日期过滤:WHERE 子句里的 t1.is_work_day = 1 直接保留工作日数据,t1.date >= '2023-01-26' 限定起始统计日期,一步过滤掉不需要的记录。
  • 关联逻辑:用 LEFT JOIN 关联两张表,条件设为考试日期小于等于当前工作日,确保所有在该工作日及之前通过培训的员工都被纳入统计。
  • 累计求和:SUM(COALESCE(t2.training_passed, 0)) OVER (ORDER BY t1.date) 是窗口函数,按日期排序后,自动计算到当前工作日的累计通过人数。COALESCE 用来处理无通过记录的工作日,返回0而非NULL。
  • 排序与分组:按工作日分组保证每个日期只出现一次,最后按日期排序让结果顺序符合时间逻辑。

备选方案(兼容老版本SQL)

如果你的SQL环境不支持窗口函数,可改用子查询实现:

SELECT 
    t1.date AS work_date,
    (SELECT SUM(training_passed) 
     FROM table2 
     WHERE exam_date <= t1.date) AS cumulative_passed
FROM 
    table1 t1
WHERE 
    t1.is_work_day = 1
    AND t1.date >= '2023-01-26'
ORDER BY 
    t1.date;

这种方式逻辑更直观,但数据量较大时性能不如窗口函数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 00:55:33