Ste*_* S. 1 mysql sql aggregate-functions greatest-n-per-group
我在MySQL服务器上试过这个查询(5.1.41)......
SELECT max(volume), dateofclose, symbol, volume, close, market FROM daily group by market
Run Code Online (Sandbox Code Playgroud)
我得到了这个结果:
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
Run Code Online (Sandbox Code Playgroud)
如您所见,最大音量与音量列的"实际"值非常不同?!?
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
Run Code Online (Sandbox Code Playgroud)
所以这给了我市场上最高交易量的股票(2010年11月8日).
如您所见,最大音量与音量列的"实际"值非常不同?!?
这是因为MySQL相当奇怪,并不是GROUP一种感性的方式.
选择MAX(column)将获得该列的最大值,但选择其他列(或其column自身)不一定会选择找到的MAX()值所在的整行.您基本上可以获得任意(通常无用的)行.
这是一个使用子查询的一些解决方案的线程: 如何用SQL中的另一列选择MAX(列值),DISTINCT的行?