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

如何筛选含跨20小时临界值的累计时长达标课程集合?

我明白你的问题了——原来的查询只抓了累计时长刚好在20小时以内的课程,但那种“最后一根稻草”式的课程(加入前累计<20,加入后超20)被漏掉了。咱们来调整一下逻辑:

调整后的SQL代码

SELECT ID, Course 
FROM ( 
    SELECT 
        a.ID, 
        a.COURSE, 
        a.DURATION, 
        SUM(b.DURATION) AS CUM_SUM,
        -- 计算当前课程加入前的累计时长
        SUM(b.DURATION) - a.DURATION AS PREV_CUM_SUM
    FROM #TempTable a 
    JOIN #TempTable b ON a.ID >= b.ID 
    GROUP BY a.ID,a.COURSE,a.DURATION 
) temp 
WHERE 
    -- 第一类:累计时长≤20的课程
    CUM_SUM <= 20 
    -- 新增:跨临界的课程——加入前累计<20,加入后超20
    OR (PREV_CUM_SUM < 20 AND CUM_SUM > 20)

逻辑说明

  1. 新增PREV_CUM_SUM字段:这个字段用来计算当前课程加入前的总累计时长(等于当前累计总和减去当前课程的时长),帮我们判断这门课是不是导致累计跨到20小时以上的那一门。
  2. 扩展筛选条件:
    • 保留原有的CUM_SUM <=20,确保累计时长没超20的课程都被选中;
    • 新增OR (PREV_CUM_SUM <20 AND CUM_SUM>20),专门捕捉那种“加入前还在20以内,加入后超了”的课程,也就是你说的从19跨到23的情况。

如果需要排除单门课程时长就超过20小时的极端情况(比如一门课直接25小时),可以在WHERE条件里再加个AND a.DURATION <=20,根据你的实际需求调整就行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:54:22