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

按日期与ID排序聚合账户余额的SQL查询问题

解决逐行累加账户余额的SQL查询问题

你的核心问题是原查询会把同一OpenDate的所有记录批量求和,而非按指定排序逐行累加。用窗口函数SUM() OVER()可以精准解决这个需求,以下是正确的SQL写法:

SELECT 
    AccountNumber, 
    ID, 
    OpenDate, 
    Balance, 
    AvailableCredit, 
    (Balance + AvailableCredit) AS TotalBalance,
    SUM(Balance + AvailableCredit) OVER (
        PARTITION BY AccountNumber 
        ORDER BY OpenDate ASC, ID DESC 
        ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
    ) AS Aggregate
FROM YourTable; -- 替换为实际表名,避免使用关键字`Table`

关键说明:

  • PARTITION BY AccountNumber:限定仅对同一用户的账户记录进行累加计算
  • ORDER BY OpenDate ASC, ID DESC:严格遵循排序要求——先按开户日期从旧到新,同一日期下按ID从高到低排序
  • ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW:明确累计范围是从当前用户的第一条记录到当前行,确保逐行累加而非批量求和(部分数据库默认此规则,但显式声明更稳妥)

原查询的问题在于子查询仅用T2.OpenDate <= OpenDate作为条件,会将同一日期的所有记录全部纳入求和范围,导致同日期的Aggregate结果直接批量相加,而非按ID排序逐行累加。窗口函数通过指定排序规则,能让累计计算严格按照你需要的顺序执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 02:37:02