2015-11-04 113 views
2

我有一個包含多個值的合同ID的表。SQL從子查詢中選擇

SELECT contractid 
    ,milestoneid 
    ,DATE 
    ,type 
    ,RANK() OVER (PARTITION BY contractid ORDER BY Milestoneid ASC) AS RankNbr 
FROM [TSWDATA].[dbo].t_milestone 
WHERE contractid = 1056229 


contractid milestoneid date  type    RankNbr 
1056  43269  10/10/15 Full    1 
1056  43449  10/26/15 GB     2 
1056  43456  10/26/15 Submit for Funding 3 
1056  43463  10/26/15 Cleared    4 

我需要加入到主合同表中,並且只有當'GB'值是最大里程碑標識時才拉合同。

我可以在where子句中做到這一點嗎?

+0

(我刪除了MySQL的標籤,因爲這顯然是適用於MS SQL Server只) –

回答

0

如果您需要合約表中的記錄,那麼您可以加入您的排名查詢。僅僅通過改變你爲了DESC所以RankNbr 1將是最大milestoneid

SELECT * 
FROM [TSWDATA].[dbo].t_contract c 
JOIN (
    SELECT contractid 
     ,type 
     ,RANK() OVER (PARTITION BY contractid ORDER BY Milestoneid DESC) AS RankNbr 
    FROM [TSWDATA].[dbo].t_milestone 
) ms ON ms.contractid = c.contractid 
WHERE 
    --contractid = 1056229 AND 
    ms.RankNbr = 1 AND ms.type = 'GB' 
+0

JamieD77 - 這個完美的作品。 非常感謝, – JDaves

0

這是否適合您?

SELECT contractid 
     ,milestoneid 
    ,DATE 
    ,type 
    ,RANK() OVER (PARTITION BY contractid ORDER BY Milestoneid ASC) AS RankNbr 
FROM [TSWDATA].[dbo].t_milestone 
WHERE EXISTS (SELECT TOP (1) * 
       FROM SubTable AS s 
       WHERE s.type = 'GB' 
       AND s.contractID = [TSWDATA].[dbo].t_milestone.contractid 
       ORDER BY s.milestoneID DESC 
      ) 
    AND contractid = 1056229