2014-10-29 32 views
0

我有以下表中選擇幾個最新值:爲不同的ID

serialNumber value masterID 
1    red 500 
1    blue 501 
2    red 502 
2    green 503 
2    black 504 

我需要返回以下

serialNumber value 
1    blue 
2    black 

我的意思是一個單一的查詢,我需要插入的最新數據在每個serialNumber的表中。 MasterID是一個增量標識(PK)。

我只設法檢索單個行的最後一個值(使用top 1並按masterid desc排序),但我需要檢索大量數據並且對每個serialNumber進行查詢不可行。

謝謝!

+1

添加SQL引擎和版本 – Horaciux 2014-10-29 15:49:34

回答

1

您可以從一個子查詢選擇MAX(MasterID),再加入結果回到談判桌來獲取價值爲最大(masterId):

SELECT t1.serialNumber, 
    value, 
    masterID 
FROM TABLE t1 
INNER JOIN (
    SELECT MAX(masterID) AS maxid, 
     serialNumber 
    FROM TABLE 
    GROUP BY serialNumber 
    ) t2 
    ON t1.masterid = t2.maxid 
     AND t1.serialNumber = t2.serialNumber 
1

如果您正在使用SQL SERVER那麼試試這個。

;WITH cte 
    AS (SELECT Row_number() 
        OVER(
        partition BY serialNumber 
        ORDER BY masterID DESC) rn, 
       serialNumber, 
       value, 
       masterID) 
SELECT serialNumber, 
     value 
FROM cte 
WHERE rn = 1