You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL 5.7中GROUP BY分组获取各message_id最早提交时间

MySQL 5.7获取每组最早日期的解决方案

问题根源

你之前的查询结果和原查询一致,是因为GROUP BY子句里包含了submit_dt。每个不同的submit_dt值会被当成独立分组,而你两条message_id=1234的记录日期不同,所以还是会分成两组,最终返回所有原始记录。


方法1:修正GROUP BY分组字段(最简方案)

只按email_id和message_id分组(这两个是你要聚合的维度),同时用MIN(submit_dt)提取每组的最早日期,并给结果列起别名匹配你期望的格式:

SELECT `email_id`,
       `message_id`,
       MIN(`submit_dt`) AS `submit_dt`
FROM `submissions`  -- 注意:你之前的查询误写了表名为`john_submissions`,请修正为实际表名`submissions`
WHERE `email_id` = '10'
GROUP BY `email_id`, `message_id`;

执行后就能得到你想要的结果:

| email_id | message_id |      submit_dt      | 
-----------------------------------------------
|   10     |   1234     | 2025-01-23 13:30:01 |
-----------------------------------------------
|   10     |   2345     | 2025-02-08 13:00:02 |
-----------------------------------------------

方法2:子查询关联(适用于需返回更多字段的场景)

如果之后需要获取该最早日期对应的其他表字段(比如提交内容、状态等),可以用子查询先筛选出每组的最早日期,再关联原表匹配数据行:

SELECT s.`email_id`,
       s.`message_id`,
       s.`submit_dt`
       -- 这里可以添加其他需要返回的字段
FROM `submissions` s
INNER JOIN (
    -- 子查询获取每个message_id的最早提交日期
    SELECT `message_id`, MIN(`submit_dt`) AS earliest_dt
    FROM `submissions`
    WHERE `email_id` = '10'
    GROUP BY `message_id`
) t ON s.`message_id` = t.`message_id` AND s.`submit_dt` = t.earliest_dt
WHERE s.`email_id` = '10';

这种方法的优势是可以完整获取最早提交记录的所有字段,而不仅仅是聚合后的日期。


内容的提问来源于stack exchange,提问作者John Beasley

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 06:28:15