【发布时间】:2010-11-09 02:31:57
【问题描述】:
我在 MySQL 服务器 (5.1.41) 上尝试过这个查询...
SELECT max(volume), dateofclose, symbol, volume, close, market FROM daily group by market
我得到了这个结果:
max(volume) dateofclose symbol volume close market
287031500 2010-07-20 AA.P 500 66.41 AMEX
242233000 2010-07-20 AACC 16200 3.98 NASDAQ
1073538000 2010-07-20 A 4361000 27.52 NYSE
2147483647 2010-07-20 AAAE.OB 400 0.01 OTCBB
437462400 2010-07-20 AAB.TO 31400 0.37 TSX
61106320 2010-07-20 AA.V 0 0.24 TSXV
如您所见,最大音量与音量列的“真实”值有很大不同?!?
volume 列定义为 int(11),我在这个表中有 200 万行,但它离 MyISAM 存储的最大值很远,所以我不敢相信这是问题所在!?同样奇怪的是从同一日期(dateofclose)获取数据。如果我使用 WHERE 子句强制指定日期,则相同的符号会产生不同的 max(volume) 结果。这很奇怪......
在这里需要一些帮助!
更新:
这是我编辑后的“工作”请求:
SELECT a.* FROM daily a
INNER JOIN (
SELECT market, MAX(volume) AS max_volume
FROM daily
WHERE dateofclose = '20101108'
GROUP BY market
) b ON
a.market = b.market AND
a.volume = b.max_volume
所以这给了我,按市场计算,最高成交量的股票(2010 年 11 月 8 日)。
【问题讨论】:
-
“真实”价值是什么意思? MAX 正在返回每个市场价值的最高交易量值。
-
是的,但对应的列似乎不匹配。添加卷列以选择显示此内容。
-
如果您选择不在 GROUP BY 中的列,MySql 似乎不会出错。 (SQL Server 会抛出错误。)
标签: sql mysql aggregate-functions greatest-n-per-group