Sql server 如何使用CTE从PARTITION BY子句中获取最大值 当前查询提供如下输出 预期产出如下
我正在使用SQL 2016并尝试从BankRequest表中获取多条记录。在这个表中,每个accountid都有多条记录,正如我在上面第一个表中提到的。但我只需要BankRequest表中每个accountid的最后一个事务idSql server 如何使用CTE从PARTITION BY子句中获取最大值 当前查询提供如下输出 预期产出如下,sql-server,sql-server-2008,Sql Server,Sql Server 2008,我正在使用SQL 2016并尝试从BankRequest表中获取多条记录。在这个表中,每个accountid都有多条记录,正如我在上面第一个表中提到的。但我只需要BankRequest表中每个accountid的最后一个事务id 请帮助我解决此问题,或帮助我实现预期输出的任何更好的替代方法。使用按AccountID DESC排序,并选择行号为1的位置 然而,我认为你给了我们一个不完整的数据集 “我只需要每个accountid的最后一个交易id”意味着您可能真的应该使用按交易id说明排序使用按帐户
请帮助我解决此问题,或帮助我实现预期输出的任何更好的替代方法。使用
按AccountID DESC排序,并选择行号为1的位置
然而,我认为你给了我们一个不完整的数据集
“我只需要每个accountid的最后一个交易id”意味着您可能真的应该使用按交易id说明排序使用按帐户id说明排序,并选择行号为1的位置
然而,我认为你给了我们一个不完整的数据集
“我只需要每个accountid的最后一个交易id”意味着您可能真的应该在最终选择中按交易id描述订购两个快速选项
ACCOUNTID NUMBER
897 3
1110 4
1119 4
1146 2
1182 1
1395 5
或
Select AccountID,Number=max(number)
From ABC
Group By AccountID
或消除CTE
Select Top 1 with ties *
From ABC
Order By Row_Number() over (Partition By AccountID Order By Number Desc)
最终选择中的两个快速选项
ACCOUNTID NUMBER
897 3
1110 4
1119 4
1146 2
1182 1
1395 5
或
Select AccountID,Number=max(number)
From ABC
Group By AccountID
或消除CTE
Select Top 1 with ties *
From ABC
Order By Row_Number() over (Partition By AccountID Order By Number Desc)
或者,您可以使用相同的cte,并获得如下所示的编号=1:
Select AccountId
Number = count(*)
From BankRequest
Group By AccountId
这类似于John提到的top 1领带,或者您可以使用相同的cte,获得数字=1,如下所示:
Select AccountId
Number = count(*)
From BankRequest
Group By AccountId
这类似于John提到的前1条领带您可以使用CTE+Row\u Number()+Max()
如下图所示
;WITH ABC AS
(
SELECT ACCOUNTID,NUMBER, ROW_NUMBER() OVER (PARTITION BY ACCOUNTID ORDER BY Number DESC) AS RowN FROM BankRequest
)
SELECT ACCOUNTID, NUMBER FROM ABC
where RowN = 1
您可以使用CTE+Row\u Number()+Max()
如下所示
;WITH ABC AS
(
SELECT ACCOUNTID,NUMBER, ROW_NUMBER() OVER (PARTITION BY ACCOUNTID ORDER BY Number DESC) AS RowN FROM BankRequest
)
SELECT ACCOUNTID, NUMBER FROM ABC
where RowN = 1
修正了那个问题修正了那个问题