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

Redshift中如何用SQL实现行与前一行的差值计算?

Redshift月度数值差值计算实现

要实现当月数值与上月数值的差值计算,Redshift可以通过**窗口函数LAG()**轻松完成,核心逻辑是获取上月的数值并与当前月做减法。

假设表结构

假设你的数据存储在表monthly_data中,包含两个字段:

  • month_name:月份名称(如'一月'、'二月')
  • value:对应月份的数值

解决方案SQL

SELECT
    month_name,
    CASE
        WHEN LAG(value) OVER (ORDER BY month_num) IS NULL THEN value
        ELSE value - LAG(value) OVER (ORDER BY month_num)
    END AS value_diff
FROM (
    SELECT
        month_name,
        value,
        -- 给中文月份分配排序序号,确保顺序正确
        CASE month_name
            WHEN '一月' THEN 1
            WHEN '二月' THEN 2
            WHEN '三月' THEN 3
            WHEN '四月' THEN 4
            WHEN '五月' THEN 5
            WHEN '六月' THEN 6
            -- 可根据实际需求扩展更多月份
        END AS month_num
    FROM monthly_data
) t
ORDER BY month_num;

逻辑说明

  1. 内层子查询通过CASE给每个中文月份分配数字序号month_num,避免字符串排序导致的月份顺序错乱,保证窗口函数的排序逻辑正确。
  2. 外层查询使用LAG(value) OVER (ORDER BY month_num)获取当前行的上一行(上月)的value值。
  3. 通过CASE判断处理边界情况:如果是第一行(一月,无上月数据),直接返回原数值;其余月份用当前数值减去上月数值得到差值。

执行结果

运行上述SQL后,将得到你期望的结果:

month_namevalue_diff
一月1000
二月500
三月-300
四月1300
五月-1500
六月4000

内容的提问来源于stack exchange,提问作者José Erildo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 14:05:12