這看起來很簡單。但花了一段時間後,我想到分享這一點。我有以下查詢。根據列值篩選結果
SELECT *
FROM UPGRADE_HISTORY
ORDER BY MERCHANT_ID, RELEASE_ID
Release_ID
列出所有版本對應於特定商家。就我而言,我需要檢索每個商家對應最新的RELEASE_ID
的結果集。
我該如何做到這一點?
這看起來很簡單。但花了一段時間後,我想到分享這一點。我有以下查詢。根據列值篩選結果
SELECT *
FROM UPGRADE_HISTORY
ORDER BY MERCHANT_ID, RELEASE_ID
Release_ID
列出所有版本對應於特定商家。就我而言,我需要檢索每個商家對應最新的RELEASE_ID
的結果集。
我該如何做到這一點?
預期的查詢是
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
你是不是指'ORDER BY MERCHANT_ID,RELEASE_ID DESC'? – jarlh
我假設這個查詢是不正確的,它不會導致OP所要求的數據。它會按照release_ids的順序以降序返回數據,而與merchant_id – Algorithmist
No @jarlh沒有任何關係。答案中的查詢是正確的。 「Order By」中排在第一位的是最高優先級 – jonju
我想這是你想要什麼:
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的最大價值。
嘗試此查詢(應該工作):
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
這也可以接受爲正確的答案 – CoolCK
只需標記無論哪個答案都解決了您的查詢是我的還是其他任何人的問題。 –
select uh.*
from Upgrade_History Uh
where Release_ID>= All(Select Release_ID from Uh2
where Uh.Merchant_ID=Uh2.Merchant_ID)
添加一些示例表的數據,目前結果和通緝的結果。 – jarlh