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

如何编写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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 11:48:03