我觉得我错过了一些非常明显的东西。
使用T-SQL / SQL-Server:
我在多个列中有唯一值,但希望根据一个特定列选择最大版本。
数据集:
实施例
ID | Name| Version | Code
------------------------
1 | Car | 3 | NULL
1 | Car | 2 | 1000
1 | Car | 1 | 2000
目标状态:我希望我的查询只选择版本值最高的行。由于“代码”列中的不同值,在版本列上运行MAX会拉动所有三个:
SELECT ID
,Name
,MAX(Version)
,Code
FROM Table
GROUP BY ID, Name, Code
最终结果是,由于代码列中的唯一值,我根据数据集获得了所有三个条目,但我只想要顶行(版本3)。
任何帮助都将不胜感激。
答案 0 :(得分:0)
您需要将具有最高版本的行标识为1个查询,并使用另一个外部查询来提取该行的所有字段。像这样:
SELECT t.ID, t.Name, GRP.Version, t.Code
FROM (
SELECT ID
,Name
,MAX(Version) as Version
FROM Table
GROUP BY ID, Name
) GRP
INNER JOIN Table t on GRP.ID = t.ID and GRP.Name = t.Name and GRP.Version = t.Version
答案 1 :(得分:0)
您也可以使用row_number()来执行此类逻辑,例如:
select ID, Name, Version, Code
from (
select *, row_number() over (order by Version desc) as RN
from Table1
) X where RN = 1
中的示例
答案 2 :(得分:0)
添加top语句以强制返回单行。也可以用符号
添加订单SELECT top 1 ID
,Name
,MAX(Version)
,Code
FROM Table
GROUP BY ID, Name, Code
order by max(version) desc