WITH ABC AS
(
SELECT ACCOUNTID,ROW_NUMBER() OVER (PARTITION BY ACCOUNTID ORDER BY ACCOUNTID) AS NUMBER FROM BankRequest
)
SELECT * FROM ABC
ACCOUNTID NUMBER
897 1
897 2
897 3
1110 1
1110 2
1110 3
1110 4
1119 1
1119 2
1119 3
1119 4
1146 1
1146 2
1182 1
1395 1
1395 2
1395 3
1395 4
1395 5
ACCOUNTID NUMBER
897 3
1110 4
1119 4
1146 2
1182 1
1395 5
我正在使用SQL 2016并尝试从BankRequest表获取多条记录。在这个表中,每个accountid有多个记录,如我在上面提到的第一个表。但我只想从BankRequest表中获得每个accountid的最后一个交易ID。
请帮助我解决这个问题或任何更好的替代方式,我可以达到预期的输出。
答案 0 :(得分:1)
最终选择中的两个快速选项
Select AccountID,Number=max(number)
From ABC
Group By AccountID
或强>
Select Top 1 with ties *
From ABC
Order By Row_Number() over (Partition By AccountID Order By Number Desc)
或消除CTE
Select AccountId
Number = count(*)
From BankRequest
Group By AccountId
答案 1 :(得分:1)
或者您可以使用相同的cte并获得Number = 1,如下所示:
;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
这类似于John提到的关系中的前1名
答案 2 :(得分:0)
使用ORDER BY AccountID DESC
,然后选择行号为1的位置。
但是,我认为你给了我们一个不完整的数据集。
“我只希望每个accountid的最后一个交易ID”意味着你应该真的ORDER BY transactionId DESC
答案 3 :(得分:0)
您可以使用下面的CTE + Row_Number() + Max()
;WITH BankRequest_Row_Number_By_ACCOUNTID
AS
(
SELECT ACCOUNTID,
Row_NUmber() over (Partition by ACCOUNTID order by ACCOUNTID) AS rowNumber_ACCOUNTID
FROM BankRequest
)
SELECT ACCOUNTID,
MAX(rowNumber_ACCOUNTID) AS NUMBER
FROM BankRequest_Row_Number_By_ACCOUNTID
GROUP BY ACCOUNTID