2015-08-03 88 views
0

我觉得我在这里错失了一些非常明显的东西。具有多个列中的唯一值的最大值

使用T-SQL/SQL-服务器:

我有多个列的唯一值,但要基于一个特定的列最高版本。

数据集:

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 

最终的结果是,我得到的所有三个条目,每个数据集由于独特价值Code列,但我只想要第一行(版本3)。

任何帮助,将不胜感激。

回答

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 
+0

感谢HashPi,这是最有效的解决方案(因为我有比这三行更大的数据集)。 – TJB

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

+0

如果您想要每个ID的最高版本,则可以将“按ID分区”添加到row_number –

0

添加top statment给力返回一行。同样按照表示法添加顺序

SELECT top 1 ID 
     ,Name 
     ,MAX(Version) 
     ,Code 
    FROM Table 
    GROUP BY ID, Name, Code 
    order by max(version) desc 
相关问题