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

如何在PostgreSQL中按条件重置累计值并重新聚合

实现带重置的累计求和(reset_date为true时重置累计)

需求是生成cumulative_point列:该列是point的累计值,每当reset_date为true时,累计值重置,不再继承之前的累计结果。

你之前尝试的SQL语句:

SUM(CASE WHEN reset_date then 0 ELSE point END) as cumulative_point

无法正确重置,因为普通的SUM会持续累加所有符合条件的行,没有区分重置后的独立分组。

正确实现方法

核心思路是先按重置点对数据分组,再在每个分组内做累计求和:

  1. 生成分组ID:通过累计reset_date为true的次数,给每个重置后的连续行分配同一个分组ID
  2. 在分组内按日期排序,累计point值

完整SQL语句:

SELECT 
    date,
    point,
    reset_date,
    SUM(point) OVER (PARTITION BY group_id ORDER BY date) AS cumulative_point
FROM (
    SELECT 
        *,
        -- 累计reset_date为true的次数,生成分组ID
        SUM(CASE WHEN reset_date THEN 1 ELSE 0 END) OVER (ORDER BY date) AS group_id
    FROM your_table_name
) AS grouped_data
ORDER BY date;

验证结果

执行上述SQL后,会得到符合需求的结果:

datepointreset_datecumulative_point
2019-01-01 00:00:001true1
2019-01-02 00:00:003false4
2019-01-03 00:00:001false5
2019-01-04 00:00:002false7
2019-01-05 00:00:001true1
2019-01-06 00:00:004false5
2019-01-07 00:00:002false7

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 16:05:27