按最高修订号进行 SQL 查询分组

neo*_*ium 1 sql sql-server

我正在尝试编写一个 SQL Server 查询来提取每个不同 ColumnId 具有最高“修订”号的行。

例如,如果我有一个数据集,例如:

Id  ColumnId  Revision
------------------------
1       1         1
2       1         2
3       1         3
4       2         1
5       2         2
6       2         3
7       2         4
Run Code Online (Sandbox Code Playgroud)

我想要的结果如下:

Id  ColumnId  Revision
------------------------
3       1        3
7       2        4
Run Code Online (Sandbox Code Playgroud)

我尝试使用以下SQL语句:

SELECT Id, ColumnId, MAX(Revision) As Revision from Bug 
GROUP BY ColumnId 
Run Code Online (Sandbox Code Playgroud)

如果我从上面的查询中删除 Id,它会部分返回我需要的内容。不过我还需要 Id 列。

为了让这个查询按预期工作,我在这里缺少什么?

编辑: 我从上面的数据集中没有弄清楚的一件事是,特定 ColumnId 的最高修订号不一定具有最高的 Id。

Id  ColumnId  Revision
------------------------
1       1         1
2       1         3 <- Note this has a higher revision number than row Id 3.
3       1         2 <- This has a lower revision number than row Id 2.
4       2         1
5       2         2
6       2         3
7       2         4
Run Code Online (Sandbox Code Playgroud)

MDi*_*sel 5

您可以使用子查询,然后在 ColumnId 和 MaxRevision 上进行内部联接,如下所示:

SELECT A.Id, A.ColumnId, A.Revision
from Bug A 
INNER JOIN
(SELECT ColumnId,  MAX(Revision) As MaxRevision 
FROM BUG
GROUP BY ColumnId ) B ON
A.ColumnId = B.ColumnId AND
A.Revision = B.MaxRevision
Run Code Online (Sandbox Code Playgroud)

  • 我接受了这个答案,因为虽然 @shree.pat18 有几乎完全相同的查询,但你的查询对它的作用有一些解释 - 我认为这将帮助其他 SQL 经验不足的人,他们可能会偶然发现这个问题。 (2认同)