最大值,具有多个列中的唯一值

时间:2015-08-03 13:06:55

标签: sql-server

我觉得我错过了一些非常明显的东西。

使用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)。

任何帮助都将不胜感激。

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

SQL Fiddle

中的示例

答案 2 :(得分:0)

添加top语句以强制返回单行。也可以用符号

添加订单
SELECT top 1 ID
        ,Name
        ,MAX(Version)
        ,Code
   FROM Table
   GROUP BY ID, Name, Code
   order by max(version) desc