基于日期和 ID 的行之间的帐户汇总余额

问题描述 投票:0回答:1

我正在尝试编写一个查询来汇总未结用户帐户的余额,但我无法让它们按所需的顺序相加。该代码应按从最旧到最新的顺序汇总帐户下每个不同行的余额,如果特定日期有多个行,则按 ID 从最高到最低的顺序汇总。该问题主要是同一天有多个开户账户的问题,因为当天的全部余额会集中在一起,而不是单独计算。

这是我想要的一个例子。

账号 身份证 开放日期 平衡 可用信用 总余额 聚合
100 1 2024 年 9 月 7 日 1,000 美元 1,500 美元 $2,500 $2,500
100 2 2024 年 9 月 8 日 2,000 美元 $2,500 $4,500 $7,000
100 90 2024 年 9 月 10 日 3,000 美元 $3,500 $6,500 $13,500
100 3 2024 年 9 月 10 日 1,000 美元 1,500 美元 $2,500 16,000 美元
100 97 2024 年 9 月 11 日 2,000 美元 $2,500 $4,500 $20,500

现在,我通过加入表的第二个副本并运行余额和可用信用的总和来提取数据,其中 AccountNumber 相同且 OpenDate 为 <= the first table. This means that anything on the same day gets SUMmed together, like this:

账号 身份证 开放日期 平衡 可用信用 总余额 聚合
100 1 2024 年 9 月 7 日 1,000 美元 1,500 美元 $2,500 $2,500
100 2 2024 年 9 月 8 日 2,000 美元 $2,500 $4,500 $7,000
100 90 2024 年 9 月 10 日 3,000 美元 $3,500 $6,500 16,000 美元
100 3 2024 年 9 月 10 日 1,000 美元 1,500 美元 $2,500 16,000 美元
100 97 2024 年 9 月 11 日 2,000 美元 $2,500 $4,500 $20,500

这一切一开始似乎很笨拙,而且我似乎无法让代码做我想做的事。任何帮助将不胜感激,谢谢。下面包含我当前代码的一个版本。

SELECT AccountNumber, 
       ID, 
       OpenDate, 
       Balance, 
       AvailableCredit, 
       (Balance + AvailableCredit) AS TotalBalance,
       (SELECT SUM(Balance) + SUM(AvailableCredit)
        FROM Table AS T2
        WHERE T2.AccountNumber = AccountNumber
          AND T2.OpenDate <= OpenDate) AS Aggregate
FROM Table

我尝试使用 GROUP BY 子句和 PARTITION/OVER 子句来使数据正确聚合,但它们的行为从来没有按照我期望的方式进行。我还尝试在连接表中添加一个

T2.ID >= ID
子句,但这也没有像我想象的那样工作。

再次感谢!

sql sql-server
1个回答
0
投票

按照ID从高到低的顺序,你在3和97之前有90,这是你想要的正确顺序应该是97,90,3

© www.soinside.com 2019 - 2024. All rights reserved.