我在 Ubuntu 10.04 上运行 MYSQL 5.1.41。
我有两张 table 。 stocks 包含一组股票的基本信息,有以下列:pk, name, pur_date, pur_price, avg_vol, mkt_cap。另一个表是包含股票表中股票价格历史的数据。数据表包含以下列:pk、ticker、date、open、high、low、close、volume、adj_close。
我需要一个查询来显示股票自购买日期和发生日期以来的最高价。
我有这个问题:
SELECT ticker, date, MAX(high)
FROM data, stocks
WHERE ticker = sym AND date > pur_date
GROUP BY ticker
ORDER BY ticker
LIMIT 0, 100
查询会给我每只股票的最高价,但总是返回数据表中的最新日期,恰好是 2011 年 12 月 23 日。如何更改查询以显示股票达到最高点的日期?
谢谢你的帮助
最佳答案
这是经典的 greatest-per-group
问题。一种解决方案是在子查询中查询票证的最大 high
:
select ticker
, date
, high
from data d
join stocks s
on d.ticker = s.sym
where d.date > pur_date
and d.high =
(
select max(high)
from data d2
where d2.ticker = d.ticker
and d2.date > pur_date
)
参见 Quassnoi 的 explain extended blog进行详细讨论。
关于mysql - 卡在 SQL 查询上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8684997/