gpt4 book ai didi

sql-server - 如何删除select query over子句中的重复记录

转载 作者:行者123 更新时间:2023-12-04 08:26:06 24 4
gpt4 key购买 nike

我在 SQL SERVER 中有如下的事务表。

 UserID       TranDate     Amount
1 | 2015-04-01 | 0
1 | 2015-05-02 | 5000
1 | 2015-09-07 | 1000
1 | 2015-10-01 | -4000
1 | 2015-10-02 | -700
1 | 2015-10-03 | 252
1 | 2015-10-03 | 260
1 | 2015-10-04 | 1545
1 | 2015-10-05 | 1445
1 | 2015-10-06 | -2000

我想查询此表以获取任何特定日期的可用余额。所以我为此使用了窗口函数。

SELECT TransactionDate, 
SUM(Amount) OVER (PARTITION BY UserId ORDER BY TransactionDate ROWS
BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM Transactions

但是由于事务表有日期 2015-10-03 的重复条目,它重复日期 2015-10-03 的数据。每当有相同的日期时,我都期待该日期的最后一条记录以及可用余额的总和。

当前输出

TransactionDate     AvailableBalance
2015-04-01 | 0
2015-05-02 | 5000
2015-09-07 | 6000
2015-10-01 | 2000
2015-10-02 | 1300
2015-10-03 | 1552
2015-10-03 | 1804
2015-10-04 | 3349
2015-10-05 | 4794
2015-10-06 | 2794

预期:我想从上面的结果集中删除下面的记录。

   2015-10-03      |       1552

HERE是我的 sql fiddle

最佳答案

您可以在窗口函数之前SUM,例如:

SqlFiddleDemo

WITH cte AS
(
SELECT TransactionDate, UserId, SUM(Amount) AS Amount
FROM Transactions
GROUP BY TransactionDate, UserId
)
SELECT TransactionDate,
SUM(Amount) OVER (PARTITION BY UserId ORDER BY TransactionDate ROWS
BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS AvailableBalance
FROM cte

关于sql-server - 如何删除select query over子句中的重复记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32990127/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com