You need to enable JavaScript to run this app. 如何按xAccID分组累加当前行与上一行的xRaseed字段值
优惠活动
大模型
产品
解决方案
定价
更多

如何按xAccID分组累加当前行与上一行的xRaseed字段值

按账户维度的滚动累计值计算实现

核心计算规则

  • 分组边界:以xAccID为分区维度,同一账户的所有记录独立开展累计计算,不跨账户累加
  • 排序前提:组内必须按xYear、xMonth升序(时间正序)排列,这是累计值计算的核心基础,否则结果会完全不符合预期
  • 累计逻辑:组内时间最早的第一行,累计值等于自身的xRaseed值;后续每一行的累计值 = 自身xRaseed值 + 同账户上一个时间节点的累计值

可直接运行的通用SQL实现

基于SQL标准的窗口函数实现,兼容MySQL 8.0+、PostgreSQL、SQL Server、Oracle等所有主流数据库:

SELECT
    xType,
    xAccID,
    xAccName,
    xCat,
    xYear,
    xMonth,
    -- 计算分区内按时间排序的累计余额
    SUM(xRaseed) OVER (
        PARTITION BY xAccID
        ORDER BY xYear, xMonth
        ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
    ) AS xRaseed
FROM 你的业务数据表名
-- 匹配示例中的展示顺序:同一账户内时间倒序排列
ORDER BY xAccID, xYear DESC, xMonth DESC

样例数据结果核对

对照给出的业务数据,计算结果与预期完全匹配:

  • 账户52(Acc1):
  • 2020年11月(组内最早时间节点):累计值 = 3144.83
  • 2020年12月:累计值 = 3144.83 + (-15199.64) = -12054.81
  • 账户53(Acc2):
  • 2020年11月(组内最早时间节点):累计值 = 1090.64
  • 2020年12月:累计值 = 1090.64 + 5306.04 = 6396.68

常见踩坑提醒

  • 不要直接使用表的原始写入顺序做累加:原始数据的写入顺序不一定和时间顺序一致,比如样例中Acc2的12月记录是先写入的、11月记录是后补的,如果不按时间字段排序计算,后续补录更早/更晚的月份数据时,累计值会完全错乱
  • 若使用的是不支持窗口函数的老旧数据库版本,可通过自连接关联同账户下所有时间早于当前行的记录求和实现,但计算效率远低于窗口函数,不适合大数据量场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.04 13:06:03