2015-08-03 61 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 
相關問題