我有一个有趣的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行,但没有重复的{{1 }}是我正在尝试获取目录的最新版本。
我尝试了一些使用max的失败解决方案,以及一些没有运气的自联接查询。最终的解决方案将需要输入CatalogID
(单独的表格)并返回所需的结果。我将做一些表连接来获得该部分,并认为我可以处理很多,但我很难从上述结果中返回正确/最大值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
任何帮助将不胜感激。
答案 0 :(得分:3)
您可以在子选择中使用GROUP BY
上的CatalogID
使用以下内容来获得最高的CatalogVersionID
。通过附加的INNER JOIN
,您可以选择所有需要的行:
SELECT t1.*
FROM table_name t1 INNER JOIN (
SELECT CatalogID, MAX(CatalogVersionID) AS CatalogVersionID
FROM table_name
GROUP BY CatalogID
) t2 ON t1.CatalogID = t2.CatalogID
AND t1.CatalogVersionID = t2.CatalogVersionID
演示: https://dbfiddle.uk/?rdbms=sqlserver_2017&fiddle=3d92a5630c71aebb79d3562c9bf8c2dd
答案 1 :(得分:1)
这是表格形式的测试数据:
CREATE TABLE #test (CatalogVersionID INT, CatalogID INT, CatalogVersionNumber VARCHAR(20))
INSERT INTO #test
(
CatalogVersionID
,CatalogID
,CatalogVersionNumber
)
VALUES
(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')
我们可以使用CTE对每个CatalogId分组中的行进行编号,并按CatalogVersionID降序排列。然后我们只输出行号= 1的那些行。
;WITH cte AS
(
SELECT
t.CatalogVersionID
, t.CatalogID
, t.CatalogVersionNumber
, rn = ROW_NUMBER() OVER (PARTITION BY t.CatalogID ORDER BY t.CatalogVersionID DESC)
FROM #test t
)
SELECT *
FROM cte
WHERE rn = 1
输出为:
CatalogVersionID CatalogID CatalogVersionNumber rn
121 492 0.0.2 1
122 493 0.0.2 1
207 494 0.1.0 1
201 572 1.0.0 1