我有一个 SQL 表,其中包含金融交易列表及其相应的帐户、日期和期末帐户余额(处理交易后的余额)。
一个帐户在任何一天都可能有多项交易。我正在尝试编写一个查询,该查询将返回每个帐户每天的最后一笔交易(交易编号最高),本质上是为我提供该帐户的最终每日余额。
最佳答案
两个快速选项。两者都与窗口函数 row_number() over()
一起使用,并且都将创建相同的结果(除了额外的列 RN)
首先是领带
Select top 1 with ties *
From YourTable
Order By row_number() over (partition by AccountID,Date order by [TransactionId] desc)
第二个具有 CTE
with cte as (
Select *
,RN = row_number() over (partition by AccountID,Date order by [TransactionId] desc)
From YourTable
)
Select * from cte where RN=1
WITH TIES
看起来更干净、更简单,但第二个选项的性能更高
关于sql - 当另一列具有匹配值时,选择一列中具有最大值的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68219131/