2016-08-02 12 views
0

これはかなり簡単かもしれません。しかし、いつか支出した後、私はこれを分かち合うことを考えました。私は次のクエリを持っています。列の値に基づいて結果をフィルタリングしてください

SELECT * 
FROM UPGRADE_HISTORY 
ORDER BY MERCHANT_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によって必要とされるデータをもたらさないでしょう。merchant_idとの関係なく降順でrelease_idsの順番でデータを返します。 – Algorithmist

+0

いいえ@jarlh。答えのクエリは正しいものです。 「Order By」の最初に来るものは、最も高い優先度を得ます – jonju

2

である私は、これはあなたが欲しいものだと思う:これはリリース番号の最大値は、加盟店ごとに1行を返します

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 
        ); 

+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) 
関連する問題