如何编写SQL查询语句选取每个id对应的第一条记录
首先要明确:SQL 中的数据表本身没有内置的顺序,你提到的「第一条记录」需要绑定明确的排序规则,从你给出的样例来看,排序逻辑是同 id 下按 name 字段的字典升序取第一个,以下是不同场景的实现方案:
通用写法(支持所有主流SQL数据库,推荐)
用窗口函数 ROW_NUMBER() 实现,兼容性最好,逻辑也最清晰:
SELECT id, name FROM ( SELECT id, name, -- 按id分组,组内按name升序排序编号,第一条的编号为1 ROW_NUMBER() OVER (PARTITION BY id ORDER BY name ASC) AS row_num FROM 替换为你的实际表名 ) AS ranked_table WHERE row_num = 1;
如果你的「第一条」是按插入时间排序,把
ORDER BY name ASC改成ORDER BY 插入时间字段 ASC即可。
低版本MySQL(8.0以下,不支持窗口函数)专属写法
如果使用不支持窗口函数的旧版MySQL,可以用分组匹配的方式实现:
SELECT t1.id, t1.name FROM 替换为你的实际表名 t1 INNER JOIN ( SELECT id, MIN(name) AS first_name FROM 替换为你的实际表名 GROUP BY id ) t2 ON t1.id = t2.id AND t1.name = t2.first_name;
执行结果
两种写法最终输出都符合你的预期:
- id 1 对应 Apple
- id 2 对应 Cassava
- id 3 对应 Almond
内容的提问来源于stack exchange,提问作者Azka
相关产品推荐
相关产品推荐

