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

如何编写SQL查询获取累计总和的运行最大值?

解决方案

直接在原累计求和的基础上,套一层MAX()窗口函数即可实现需求,修改后的代码如下:

select ItemId, DateId, TargetRunningStock, 
       -- 计算截至当前行的累计总和
       sum(TargetRunningStock) over (partition by itemid order by dateid) as RunningTotal,
       -- 取截至当前行的累计总和最大值
       max(sum(TargetRunningStock) over (partition by itemid order by dateid)) 
           over (partition by itemid order by dateid rows between unbounded preceding and current row) as MaxRunningTotal
from WarehouseData

逻辑说明

  • 第一个窗口函数sum(...)保留原逻辑,算出每行对应的累计总和(RunningTotal);
  • 第二个窗口函数max(...)以相同的分区(ItemId)和排序(DateId)为范围,取从分区第一行到当前行的所有累计总和中的最大值,也就是你需要的「截至该行的累计总和最大值」。

如果你的SQL支持CTE(公共表表达式),可以把逻辑拆成两步,可读性更强:

with RunningTotals as (
    select ItemId, DateId, TargetRunningStock,
           sum(TargetRunningStock) over (partition by itemid order by dateid) as RunningTotal
    from WarehouseData
)
select ItemId, DateId, TargetRunningStock, RunningTotal,
       max(RunningTotal) over (partition by itemid order by dateid) as MaxRunningTotal
from RunningTotals

这种写法先把累计求和的结果单独提取出来,再基于这个结果取最大值,逻辑更直观,也方便后续扩展。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 13:17:37