【发布时间】:2019-01-24 18:48:59
【问题描述】:
我有一个有趣的 SQL 问题,我不确定最好的解决方法。如果 CatalogID 相等,我需要选择最大/最高 ID 号 (CatalogVersionID):
+------------------+-----------+----------------------+
| CatalogVersionID | CatalogID | CatalogVersionNumber |
+------------------+-----------+----------------------+
| 121 | 492 | 0.0.2 |
| 122 | 493 | 0.0.2 |
| 123 | 494 | 0.0.1 |
| 201 | 572 | 1.0.0 |
| 207 | 494 | 0.1.0 |
+------------------+-----------+----------------------+
所以,上面应该只为CatalogID = 494输出一行,它应该是CatalogVersionID = 207和CatalogVersionNumber = 0.1.0的行,同时还返回其他3行没有重复的CatalogID我正在尝试获取目录的最新版本。
我尝试了一些使用 max 的失败解决方案,以及一些没有运气的自连接查询。最终的解决方案需要输入GroupID(单独的表)并返回所需的结果。我会加入一些表格来获得那部分,并且认为我可以处理这么多,我只是无法从上述结果中返回正确/最大 CatalogVersionID:
期望的输出:
+------------------+-----------+----------------------+
| CatalogVersionID | CatalogID | CatalogVersionNumber |
+------------------+-----------+----------------------+
| 121 | 492 | 0.0.2 |
| 122 | 493 | 0.0.2 |
| 201 | 572 | 1.0.0 |
| 207 | 494 | 0.1.0 |
+------------------+-----------+----------------------+
这是我尝试过的,只能获得整个结果集的最大值 CatalogVersionID(这显示了正在连接的其他表):
select cv.*
From CatalogBuilder.CatalogVersion cv
JOIN(select max(c.CatalogVersionID) as max_id
from [CatalogBuilder].[CatalogVersion] c
inner join [CatalogBuilder].[Catalog] cat on c.CatalogID = cat.CatalogID
inner join [CatalogBuilder].[Group] g on g.GroupID = cat.GroupID
where g.GroupID = 157)
b on b.max_id = cv.CatalogVersionID
任何帮助将不胜感激。
【问题讨论】:
标签: sql sql-server tsql