我希望能够从电子邮件表中选择一堆行并按发件人分组。我的查询如下所示:
SELECT
`timestamp`, `fromEmail`, `subject`
FROM `incomingEmails`
GROUP BY LOWER(`fromEmail`)
ORDER BY `timestamp` DESC
该查询几乎可以按我希望的方式工作-它选择按电子邮件分组的记录。问题在于主题和时间戳记与特定电子邮件地址的最新记录不符。
例如,它可能返回:
fromEmail: john@example.com, subject: hello
fromEmail: mark@example.com, subject: welcome
当数据库中的记录是:
fromEmail: john@example.com, subject: hello
fromEmail: john@example.com, subject: programming question
fromEmail: mark@example.com, subject: welcome
如果“编程问题”主题是最新的,那么在对电子邮件进行分组时如何使MySQL选择该记录?
一个简单的解决方案是将查询包裹与ORDER语句子选择 第一 和应用GROUP BY 后 :
SELECT * FROM (
SELECT `timestamp`, `fromEmail`, `subject`
FROM `incomingEmails`
ORDER BY `timestamp` DESC
) AS tmp_table GROUP BY LOWER(`fromEmail`)
这类似于使用联接,但看起来要好得多。
在带有GROUP BY子句的SELECT中使用非聚合列是非标准的。MySQL通常会返回找到的第一行的值,并丢弃其余的行。任何ORDER
BY子句仅适用于返回的列值,而不适用于丢弃的值。
重要更新
选择非聚合列可在实践中使用,但不应依赖于此。根据MySQL文档, “这主要在以下情况下有用:每个未聚合的列中未在GROUP BY中命名的所有值对于每个组都是相同的。服务器可以从每个组中
自由选择任何值 ,因此 除非它们相同,否则这些值选择的是不确定的 。”
从5.7.5版本开始,默认情况下仅启用ONLY_FULL_GROUP_BY,因此非聚合列会导致查询错误(ER_WRONG_FIELD_WITH_GROUP)
正如@mikep在下面指出的,解决方案是使用5.7及更高版本的ANY_VALUE()
参见 http://www.cafewebmaster.com/mysql-order-sort-group
https://dev.mysql.com/doc/refman/5.6/en/group-by-handling.html
https://dev.mysql .com / doc / refman / 5.7 / en / group-by-handling.html
https://dev.mysql.com/doc/refman/5.7/en/miscellaneous-
functions.html#function_any-
value
此实例中的任务是获取数据库中每个作者的最新文章。 示例查询产生不可用的结果,因为它并不总是返回的最新消息。 目前公认的答案是 编辑:这个问题是另一个问题的延续,我的具体情况略有不同。您可以(也应该)假设还有一个wp_posts.id是该特定帖子的唯一标识符。
问题内容: 我有一张标签表,想从列表中获得计数最高的标签。 样本数据如下所示 使用 让我得到正在寻找的完美数据。但是,我想对它进行组织,以使最高的标签数排在首位,并限制它仅向我发送前20个左右。 我试过了 而且我不断收到“组功能的无效使用-ErrNr 1111” 我究竟做错了什么? 我正在使用MySQL 4.1.25-Debian 问题答案: 在所有版本的MySQL中,只需在SELECT列表中为聚
问题内容: 在这里可以找到很多类似的问题,但是我认为没有一个人能够充分回答这个问题。 如果可以的话,我将继续从当前最受欢迎的问题开始,并使用其示例。 本例中的任务是获取数据库中每个作者的最新帖子。 该示例查询产生不可用的结果,因为它并不总是返回最新的帖子。 当前接受的答案是 不幸的是,这个答案是简单而简单的错误,并且在许多情况下产生的结果比原始查询更不稳定。 我最好的解决方案是使用形式的子查询 我
我正在尝试使用Elasticsearch(2.4)聚合对使用该查询的多个索引按“productId”分组 1) 我想按分数排序,所以我尝试使用 哪个返回 2) 此外,我正在尝试使用分页,“size”键实际起作用,但“from”键不起作用 **更新-聚合结果示例** 希望有人能帮忙
问题内容: 我有以下SQL: 输出如下: 我希望能够仅获取一个代码并获得最近的距离。所以我希望它返回这个: 我最初有这样的东西: 如果我不想获得与最小距离相关联的正确位置,则最小值显示效果很好。如何获取最小距离(和距离)以及正确的位置(取决于表格中插入内容的顺序,有时您可能会得到纽约距离,但夏洛特位于“位置”)。 问题答案: 为了获得正确的关联位置,您需要加入一个子选择,该子选择在外部主表中的距离
问题内容: 我正在MySQL 5.5中成功运行查询 但是,我需要使用DELETE运行相同的查询,但我不确定如何删除?即返回的结果应该删除? 有任何想法吗 ? 问题答案: 将其放在子查询中: