2016-08-02 128 views
0

這看起來很簡單。但花了一段時間後,我想到分享這一點。我有以下查詢。根據列值篩選結果

SELECT * 
FROM UPGRADE_HISTORY 
ORDER BY MERCHANT_ID, RELEASE_ID 

Release_ID列出所有版本對應於特定商家。就我而言,我需要檢索每個商家對應最新的RELEASE_ID的結果集。

我該如何做到這一點?

+1

添加一些示例表的數據,目前結果和通緝的結果。 – jarlh

回答

0

預期的查詢是

SELECT uh.* 
FROM UPGRADE_HISTORY uh 
Where uh.RELEASE_ID = (SELECT MAX(RELEASE_ID) 
         FROM UPGRADE_HISTORY 
         WHERE MERCHANT_ID=uh.MERCHANT_ID) 
ORDER BY uh.MERCHANT_ID, uh.RELEASE_ID 
+0

你是不是指'ORDER BY MERCHANT_ID,RELEASE_ID DESC'? – jarlh

+0

我假設這個查詢是不正確的,它不會導致OP所要求的數據。它會按照release_ids的順序以降序返回數據,而與merchant_id – Algorithmist

+0

No @jarlh沒有任何關係。答案中的查詢是正確的。 「Order By」中排在第一位的是最高優先級 – jonju

2

我想這是你想要什麼:

select uh.* 
from upgrade_history uh 
where uh.release_id = (select max(uh2.release_id) 
         from upgrade_history uh2 
         where uh2.merchant_id = uh.merchant_id 
        ); 

這將返回每個商家提供的一行,發放ID的最大價值。

+1

這正是我正在尋找的。這工作像魔術:) – CoolCK

+1

@CoolCK:如果這個答案解決了你的問題,你可以[接受答案](http://meta.stackexchange.com/a/5235/312043),所以它告訴其他人你的問題是解決。 – Arulkumar

1

嘗試此查詢(應該工作):

SELECT 
    * 
FROM UPGRADE_HISTORY UH1 
INNER JOIN 
(
    SELECT 
     MERCHANT_ID 
     ,MAX(RELEASE_ID) RELEASE_ID 
    FROM UPGRADE_HISTORY 
    GROUP BY MERCHANT_ID 
) UH2 ON 
UH2.MERCHANT_ID = UH1.MERCHANT_ID 
AND UH2.RELEASE_ID = UH1.RELEASE_ID 
+0

這也可以接受爲正確的答案 – CoolCK

+0

只需標記無論哪個答案都解決了您的查詢是我的還是其他任何人的問題。 –

0
select uh.* 
from Upgrade_History Uh 
where Release_ID>= All(Select Release_ID from Uh2 
         where Uh.Merchant_ID=Uh2.Merchant_ID)