2013-10-28 37 views
0

我需要爲一組多個ID獲取列的最新值(current_price)。我有存儲在第三列中的日期/時間,並已嘗試使用這樣的MAX()函數:如何在使用MAX()時從記錄中獲取非聚合值?

select symid, current_price, MAX(price_date_time) 
from tblHistory 
group by SymID 

很顯然,這是行不通的,因爲我沒有CURRENT_PRICE列爲要麼聚集函數或在group by子句中。但我需要的結果只是簡單地列出最新日期/時間的current_price以及它與哪個ID相關聯。這可能嗎?

回答

1

如果你的db支持分析查詢。 (以 「RANK()」 替換 「ROW_NUMBER()」,讓領帶)

SELECT * FROM 
(
SELECT symid, current_price, ROW_NUMBER() OVER (PARTITION BY symid ORDER BY price_date_time DESC) AS rn 
FROM tblHistory 
) AS T 
WHERE rn = 1 
+0

正是我需要的。以前從未見過OVER/PARTITION BY,這可能會派上用場。謝謝! – user2085955

0

如果OVER/PARTITION BY查詢(不支持,他們往往都沒有),用途:

SELECT t.symid, t.current_price, t.price_date_time 
FROM tblHistory t 
    JOIN (
     SELECT symid, MAX(price_date_time) price_date_time 
     FROM tblHistory 
     GROUP BY symid 
    ) t2 ON t.symid = t2.symid AND t.price_date_time = t2.price_date_time 
相關問題