按 id 分组后从 table 获取所有值
Getting all values from table after grouping by id
我有一个 table,其中包含具有三个值 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
但我不知道如何获取连接到每个 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
我有一个 table,其中包含具有三个值 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
但我不知道如何获取连接到每个 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