首页 > 解决方案 > 按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。

标签: sqlsql-servertsqlsql-server-2012greatest-n-per-group

解决方案


您可以使用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

推荐阅读