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

PostgreSQL如何对多组日期计算前n天滑动及当月累计求和

PostgreSQL 滑动求和与月度累计求和实现方案

首先默认原始数据表结构如下,你可以根据自己的实际表结构替换对应名称:

  • 表名:original_data
  • 字段1:dt DATE 存储日期
  • 字段2:val INT 存储对应统计数值

1. 计算当日及此前4天的数值总和(近5天滑动总和)

使用窗口函数实现,支持自动处理日期断档场景,计算结果存储为独立表rolling_5d_sum,实现语句如下:

CREATE TABLE rolling_5d_sum AS
SELECT
    dt,
    SUM(val) OVER (
        ORDER BY dt 
        RANGE BETWEEN INTERVAL '4 days' PRECEDING AND CURRENT ROW
    ) AS last_5d_total
FROM original_data
ORDER BY dt;

说明:如果你的日期数据完全连续无缺失,可将窗口逻辑替换为ROWS BETWEEN 4 PRECEDING AND CURRENT ROW,查询性能更优。


2. 计算月初到当日的累计数值总和(MTD累计)

通过月度分区窗口实现,计算结果存储为独立表mtd_sum,实现语句如下:

CREATE TABLE mtd_sum AS
SELECT
    dt,
    SUM(val) OVER (
        PARTITION BY DATE_TRUNC('month', dt)
        ORDER BY dt
    ) AS month_to_date_total
FROM original_data
ORDER BY dt;

说明:DATE_TRUNC('month', dt)会将日期统一截断为当月第一天,按该字段分区后累加即可得到同月份内从月初到当前日期的累计值,完全符合需求示例的计算规则。


如果你需要先验证计算结果是否符合预期,可以先去掉CREATE TABLE XXX AS部分,只运行SELECT查询查看结果,确认无误后再执行建表存储操作即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 16:09:02