我有一个查询的这一部分:
GROUP BY trackid
ORDER BY MAX(history.date) DESC我看到,当我分组时,它返回每个组的最大日期行。为什么会有这种行为?顺序应该在分组的整个rows...not上工作吗?!?
编辑(示例)
这是我的全部疑问:
SELECT tracklist.value, history.date
FROM history JOIN tracklist ON history.trackid=tracklist.trackid
ORDER BY history.date DESC结果是:
tracklist3 2011-04-27 15:40:36
tracklist2 2011-04-27 13:15:43
tracklist2 2011-04-02 00:30:02
tracklist2 2011-04-01 14:20:12
tracklist1 2011-03-02 14:13:58
tracklist1 2011-03-01 12:11:50如您所见,所有行都由history.date正确排序。现在我想对它们进行分组,为每个组保留MAX history.date的行。因此,产出应该是:
tracklist3 2011-04-27 15:40:36
tracklist2 2011-04-27 13:15:43
tracklist1 2011-03-02 14:13:58我看到:
GROUP BY trackid
ORDER BY MAX(history.date) DESC工作正常,但我真的不明白它为什么工作:) Order是针对整个行,而不是对分组.。
发布于 2011-04-28 15:06:57
当你说SELECT trackid, MAX(history.date) ... GROUP BY trackid ORDER BY MAX(history.date) DESC的时候,你真的是在说:“为每个履历显示给我最新的历史条目,请先给我看看它最近的历史条目是(总体上)最近的。”
ORDER BY是在分组之后应用的(这就是它在中的GROUP BY后面的原因)。
注意,在您的示例中,您使用的是SELECT tracklist.value, history.date而不是SELECT tracklist.value, MAX(history.date)。这是错误的,不幸的是,MySQL没有给出警告,但它随意选择了一个随机 history.date。
https://stackoverflow.com/questions/5820722
复制相似问题