首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么ORDER + MAX()在我分组时返回最大值?

为什么ORDER + MAX()在我分组时返回最大值?
EN

Stack Overflow用户
提问于 2011-04-28 15:03:33
回答 3查看 17.4K关注 0票数 2

我有一个查询的这一部分:

代码语言:javascript
复制
GROUP BY trackid 
ORDER BY MAX(history.date) DESC

我看到,当我分组时,它返回每个组的最大日期行。为什么会有这种行为?顺序应该在分组的整个rows...not上工作吗?!?

编辑(示例)

这是我的全部疑问:

代码语言:javascript
复制
SELECT tracklist.value, history.date
FROM history JOIN tracklist ON history.trackid=tracklist.trackid 
ORDER BY history.date DESC

结果是:

代码语言:javascript
复制
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的行。因此,产出应该是:

代码语言:javascript
复制
tracklist3  2011-04-27 15:40:36
tracklist2  2011-04-27 13:15:43
tracklist1  2011-03-02 14:13:58

我看到:

代码语言:javascript
复制
GROUP BY trackid 
ORDER BY MAX(history.date) DESC

工作正常,但我真的不明白它为什么工作:) Order是针对整个行,而不是对分组.。

EN

Stack Overflow用户

回答已采纳

发布于 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

票数 6
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5820722

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档