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

计算累计值时出现重复,求SQL实现日期累计求和的正确方案

解决SQL累计值计算中的重复数据问题

问题原因

你当前的SQL使用窗口函数SUM(Value) OVER (PARTITION BY Date)时,会为原始表中的每一行返回当日的总和,所以原始表中同一日期有多行时,结果就会出现重复行。

解决方案

要实现「先按日期汇总当日数值,再累加之前所有日期总值」的需求,分两步处理即可:

步骤1:按日期聚合每日总和

通过GROUP BY Date将同一日期的Value求和,得到每个日期唯一的当日总值:

SELECT 
    Date,
    SUM(Value) AS daily_total
FROM your_table
GROUP BY Date
ORDER BY Date;

这一步的输出结果:

Datedaily_total
2021-01-01 00:00:0020
2021-01-02 00:00:0050
2021-01-03 00:00:0030

步骤2:基于每日总和计算累计值

将第一步的结果作为子查询,使用窗口函数SUM(daily_total) OVER (ORDER BY Date)按日期顺序累加每日总值:

SELECT 
    Date,
    SUM(daily_total) OVER (ORDER BY Date) AS cumulative_value
FROM (
    SELECT 
        Date,
        SUM(Value) AS daily_total
    FROM your_table
    GROUP BY Date
) AS daily_sums
ORDER BY Date;

最终结果

执行上述SQL后,就能得到你期望的无重复累计值结果:

Datecumulative_value
2021-01-01 00:00:0020
2021-01-02 00:00:0070
2021-01-03 00:00:00100

补充说明

如果不想用子查询,也可以用DISTINCT直接去重,但这种方式效率不如先聚合(窗口函数需要处理原始表所有行后再去重),示例如下:

SELECT DISTINCT
    Date,
    SUM(SUM(Value)) OVER (ORDER BY Date) AS cumulative_value
FROM your_table
GROUP BY Date;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 15:07:34