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

如何用MySQL查询每组首个/最后一个唯一条目及全部字段

MySQL获取分组内首个/最后一个条目(返回全字段)

针对你需要按groupId分组,获取每组首个或最后一个条目并返回全字段的需求,这里提供两种兼容不同MySQL版本的解决方案:

方案1:子查询关联(兼容MySQL 5.x及以上)

这种方法通过先找出每组的最小/最大id(对应组内首个/最后一个条目),再关联原表获取完整记录。

获取每组首个条目(最小id的记录)

SELECT t.*
FROM your_table t
INNER JOIN (
    SELECT groupId, MIN(id) AS min_id
    FROM your_table
    GROUP BY groupId
) g ON t.id = g.min_id
ORDER BY t.groupId;

获取每组最后一个条目(最大id的记录)

SELECT t.*
FROM your_table t
INNER JOIN (
    SELECT groupId, MAX(id) AS max_id
    FROM your_table
    GROUP BY groupId
) g ON t.id = g.max_id
ORDER BY t.groupId;

方案2:窗口函数(MySQL 8.0及以上)

如果你的MySQL版本是8.0或更高,使用窗口函数ROW_NUMBER()的写法更直观,便于扩展排序规则(比如按时间排序而非id)。

获取每组首个条目

SELECT id, groupId, data
FROM (
    SELECT *,
           ROW_NUMBER() OVER (PARTITION BY groupId ORDER BY id ASC) AS rn
    FROM your_table
) t
WHERE rn = 1
ORDER BY groupId;

获取每组最后一个条目

SELECT id, groupId, data
FROM (
    SELECT *,
           ROW_NUMBER() OVER (PARTITION BY groupId ORDER BY id DESC) AS rn
    FROM your_table
) t
WHERE rn = 1
ORDER BY groupId;

注意:如果你的“首个/最后一个”不是基于id排序,而是其他字段(如创建时间create_time),只需将ORDER BY id ASC/DESC替换为ORDER BY create_time ASC/DESC即可。

内容的提问来源于stack exchange,提问作者Mikkel Følsgaard

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 10:27:36