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

SQL如何按id列分区计算大于当前month_diff的3个领先value的和

实现方案

你可以使用带滑动窗口框架的聚合窗口函数实现需求,核心逻辑是按id分组后,按month_diff升序排序,取当前行之后的3行Value求和即可,以下是通用SQL实现:

SELECT 
    id,
    month_diff,
    Value,
    SUM(Value) OVER(
        PARTITION BY id 
        ORDER BY month_diff ASC
        ROWS BETWEEN 1 FOLLOWING AND 3 FOLLOWING
    ) AS target_result
FROM 你的表名

逻辑说明

  • PARTITION BY id:按id列分组,不同id的计算完全隔离
  • ORDER BY month_diff ASC:分组内按month_diff从小到大排序,保证取到的后续行都是month_diff大于当前行的记录
  • ROWS BETWEEN 1 FOLLOWING AND 3 FOLLOWING:限定窗口范围为当前行之后的第1行到第3行,刚好覆盖你需要的3个符合条件的leading value
  • 如果某行后续不足3条记录,求和结果会自动取实际存在的后续行的总和,如果没有后续行结果为NULL,你也可以搭配COALESCE函数把NULL转为0

该语法适配所有支持标准SQL窗口函数的数据库,包括MySQL 8.0+、PostgreSQL、Spark SQL、Hive、Presto等。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 06:39:01