我在名为id和version的表中有两列,如下所示:
ID | Version |
1 | A.15 |
1 | Z.6 |
1 | C.5 |
1 | BD.3 |
1 | BD.2 |
1 | AB.13 |
2 | C.45 |
2 | Z.56 |
2 | Z.8 |
我的要求是我必须为表中的每个ID选择max(Version)。在这种情况下,我应该得到以下结果:
|ID | MAX(Version)|
| 1 | BD.3 |
| 2 | Z.56 |
但是我得到以下结果:
|ID | MAX(Version)|
| 1 | Z.6 |
| 2 | Z.8 |
当我使用此查询时:
SELECT ID,MAX(Version)
FROM table
GROUP BY ID
请建议我一个好的解决方案,以获得我想要的结果。谢谢你。
尝试这个:
DECLARE @MyTable TABLE(ID INT, Version VARCHAR(10))
INSERT INTO @MyTable
VALUES (1,'A.15'), (1,'Z.6'), (1,'C.5'), (1,'BD.3'), (1,'BD.2'),
(1,'AB.13'), (2,'C.45'), (2,'Z.56'), (2,'Z.8')
--
SELECT
ID,
Version
FROM
(
SELECT
ID,
Version,
ROW_NUMBER() OVER
(
PARTITION BY ID
ORDER BY LEN(LEFT(Version, CHARINDEX('.',Version)-1)) DESC,
LEFT(Version, CHARINDEX('.',Version)-1) DESC,
CAST(STUFF(Version, 1, CHARINDEX('.',Version),'') AS INT) DESC
) AS Pos
FROM
@MyTable
) T
WHERE Pos = 1
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句