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

MS SQL如何取首行total值累加后续margin值并替换原total列?

问题:基于首行Total值累加Margin生成新Total列(MS SQL)

原始查询结果表

totalmargindate
45-12022-01
4502022-02
4502022-03
4512022-04
45-12022-05
4502022-06

需求说明

取首行的total值,每行累加对应margin值来替换原total列,忽略其他行的原始total值,期望结果如下:

期望结果表

totalmargindate
44-12022-01
4402022-02
4402022-03
4512022-04
44-12022-05
4402022-06

尝试过的方法及问题

曾使用LAG函数,但该函数无法追踪累计变化(例如第四行取到的是前一行原始值45,而非累计后的44),无法满足需求。

解决方案

通过以下SQL语句实现需求:

first_value(total) over(order by [date] ROWS UNBOUNDED PRECEDING) + sum(margin) over(order by [date] ROWS UNBOUNDED PRECEDING) as total

原理说明

  • first_value(total) over(order by [date] ROWS UNBOUNDED PRECEDING):获取按date排序后的首行total值(即45),所有行都返回该值
  • sum(margin) over(order by [date] ROWS UNBOUNDED PRECEDING):计算从首行到当前行的margin累计和
  • 两者相加得到基于首行total累加累计margin后的新total值,完全匹配需求

内容的提问来源于stack exchange,提问作者Domantas Puišys

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 21:15:34