sql - 按id分组后从表中获取所有值
问题描述
我有一个表,其中包含像这样的三个值 Id、RevisionId 和 Data 的项目。
| Id | RevisionId | Data |
| 0 | 0 | Value1 |
| 0 | 1 | Value2 |
| 1 | 0 | Value1 |
| 2 | 0 | Value1 |
| 2 | 1 | Value2 |
| 2 | 3 | Value3 |
如果我只想要每个具有最高 RevisionId 的 Id,我可以制作这样的 SQL 语句。
SELECT Id, MAX(RevisionId) AS RevisionId FROM RevisionTable GROUP BY Id
但我不知道如何将 Data 值连接到每个 Id 的最大 RevisionId。
解决方案
您可以使用row_number()
:
select *
from (
select t.*, row_number() over(partition by id order by revisionid desc) rn
from mytable t
) t
where rn = 1
top(1) with ties
还想到:
select top (1) with ties t.*
from mytable t
order by row_number() over(partition by id order by revisionid desc) rn