如何在使用MAX()时从记录中获取非聚合值?

时间:2013-10-28 03:29:40

标签: sql

我需要为一组多个ID获取列(current_price)的最新值。我将日期/时间存储在第三列中并尝试使用MAX()函数,如下所示:

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

显然,这不起作用,因为我没有将current_price列为聚合函数或group by子句。但我需要结果只是简单地列出最新日期/时间的current_price以及与之关联的ID。这可能吗?

2 个答案:

答案 0 :(得分:1)

如果您的数据库支持分析查询。 (将“ROW_NUMBER()”替换为“RANK()”以允许并列)

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

答案 1 :(得分: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