首页 > 数据库 > mysql教程 > 如何使用 MySQL 的 GROUP BY 和 ORDER BY 检索每个发件人的最新电子邮件?

如何使用 MySQL 的 GROUP BY 和 ORDER BY 检索每个发件人的最新电子邮件?

Mary-Kate Olsen
发布: 2025-01-12 13:57:46
原创
984 人浏览过

How to Retrieve the Most Recent Email from Each Sender Using MySQL's GROUP BY and ORDER BY?

MySQL 的 GROUP BYORDER BY 子句详解及应用

在 MySQL 数据库中操作数据表时,理解 GROUP BYORDER BY 子句的交互至关重要。 考虑以下场景:

您需要按发件人的电子邮件地址对电子邮件表中的行进行分组,目标是从每个发件人中检索最新的电子邮件。 但是,以下查询:

<code class="language-sql">SELECT 
    `timestamp`, `fromEmail`, `subject`
FROM `incomingEmails` 
GROUP BY LOWER(`fromEmail`) 
ORDER BY `timestamp` DESC</code>
登录后复制

会产生不正确的结果。 它按发件人对电子邮件进行分组,但可能不会显示每个分组中最新的主题。 结果可能显示:

<code>fromEmail: [email protected], subject: hello
fromEmail: [email protected], subject: welcome</code>
登录后复制

而实际数据包含:

<code>fromEmail: [email protected], subject: hello
fromEmail: [email protected], subject: programming question
fromEmail: [email protected], subject: welcome</code>
登录后复制

解决方案:使用子查询和 ANY_VALUE() 函数

为了解决这个问题,您可以结合使用子查询和 ANY_VALUE() 函数:

<code class="language-sql">SELECT * 
FROM ( 
    SELECT `timestamp`, `fromEmail`, ANY_VALUE(`subject`) AS `subject`
    FROM `incomingEmails` 
    ORDER BY `timestamp` DESC
) AS tmp_table 
GROUP BY LOWER(`fromEmail`)</code>
登录后复制

在 MySQL 5.7 及更高版本中,ANY_VALUE() 允许在带有 GROUP BY 子句的 SELECT 语句中使用非聚合列。 它从每个组中随机选择一个值,确保子查询为每个发件人的电子邮件地址检索最新的主题。

以上是如何使用 MySQL 的 GROUP BY 和 ORDER BY 检索每个发件人的最新电子邮件?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板