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

如何用Snowflake SQL的RANK() OVER()窗口函数实现指定分组求和需求

解决方案

原代码存在以下几个问题:

  • 子查询中AMT2与RANK()之间缺少逗号,触发语法错误
  • 排序字段使用了LAST_MODIFIED_DATE,但需求里的日期字段是MOD_DATE,字段名不匹配
  • 未实现AMT2的求和操作,也未按A、B、C、AMT1完成分组

根据你的需求,提供两种可行写法:

方法一:直接过滤指定最新日期后分组求和

若明确最新日期为20221104,可直接过滤该日期的数据,再按要求分组求和:

SELECT 
    A, 
    B, 
    C, 
    AMT1, 
    SUM(AMT2) AS SUM_AMT2
FROM INPUT_TABLE
WHERE MOD_DATE = 20221104
GROUP BY A, B, C, AMT1;

方法二:动态获取每个分组的最新日期(若日期非固定值)

若需求是每个A、B、C分组的最新MOD_DATE数据,再按A、B、C、AMT1分组求和,可修正窗口函数写法:

SELECT 
    A, 
    B, 
    C, 
    AMT1, 
    SUM(AMT2) AS SUM_AMT2
FROM (
    SELECT 
        A, 
        B, 
        C, 
        AMT1, 
        AMT2,
        RANK() OVER (PARTITION BY A, B, C ORDER BY MOD_DATE DESC) AS rk
    FROM INPUT_TABLE
) t
WHERE rk = 1
GROUP BY A, B, C, AMT1;

说明

  • 方法一适用于已知固定最新日期的场景,性能更优
  • 方法二适用于每个分组最新日期不同的场景,通过窗口函数筛选出每组最新数据后再求和

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 15:15:40