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

如何在Redshift中使用window functions仅聚合连续特定值的行?

解决方案:SQL实现连续B=1行的聚合需求

源表数据

ABC
1012
2013
315
411
512
6022
7020
811
9110
10011
11012

预期结果

new_Anew_C
112
213
58
622
720
911
1011
1112

实现思路

核心是识别连续的B=1行组:通过累计计数生成分组ID,每次遇到B=0的行就累加计数,这样连续的B=1行会被归为同一个分组。之后对不同分组分别处理:

  • B=0的行直接保留原A、C值
  • B=1的分组聚合计算MAX(A)和SUM(C)

SQL代码

WITH grouped_data AS (
    SELECT
        A,
        B,
        C,
        -- 生成分组ID:遇到B=0时累加,连续B=1行共享同一ID
        SUM(CASE WHEN B = 0 THEN 1 ELSE 0 END) OVER (ORDER BY A) AS group_id
    FROM your_table_name
)
SELECT
    CASE
        WHEN B = 0 THEN A
        ELSE MAX(A)
    END AS new_A,
    CASE
        WHEN B = 0 THEN C
        ELSE SUM(C)
    END AS new_C
FROM grouped_data
GROUP BY group_id, B, 
         CASE WHEN B = 0 THEN A ELSE NULL END, 
         CASE WHEN B = 0 THEN C ELSE NULL END
ORDER BY new_A;

代码说明

  1. CTE grouped_data:通过窗口函数SUM() OVER (ORDER BY A)生成分组ID,确保连续的B=1行属于同一分组。
  2. 分组聚合:
    • 对B=0的行,按group_id+A+C分组,直接保留原数据
    • 对B=1的分组,按group_id+B分组,计算聚合值
  3. 排序:最终按new_A升序排列,匹配预期结果顺序

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 13:52:09