mysql - 卡在 SQL 查询上

标签 mysql sql greatest-n-per-group

我在 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/

相关文章:

java - Apache Derby : Achieving 'SELECT INTO' behaviour

C# 在插入时返回标识

SQL 查询,每个唯一二重奏的最新行

MYSQL:限制每个 whereIn() 的行数

php - Doctrine 和 LIKE 查询

php - 计算并显示日期为 'secs ago' 、 'mins ago' 、 'hours ago' 等

mysql - 这个防止空日期的 MySQL 触发器有什么问题?

mysql - 如何从单个数组中的两个查询传递json

sql - 需要计算截止日期的年月日

mysql - 检索每组中的最后一条记录 - MySQL