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

如何编写SQL语句选取每种Type对应最小Id的行?

没问题,这是几种能实现你需求的SQL写法,你可以根据自己使用的数据库类型来选择合适的方案:

首先明确下你的表数据和需求:

表X的原始数据:

IdTypeName
11Jane
22Mary
33Rose
44Rachel
54Darren
64Jay

需要得到每种Type中Id最小的行,结果如下:

IdTypeName
11Jane
22Mary
33Rose
44Rachel

方法1:使用窗口函数(推荐,适用于主流数据库如MySQL 8+、PostgreSQL、SQL Server等)

窗口函数ROW_NUMBER()可以给每个Type分组内的行按Id排序,筛选出排序第一的行即可:

SELECT Id, Type, Name
FROM (
    SELECT 
        Id, Type, Name,
        ROW_NUMBER() OVER (PARTITION BY Type ORDER BY Id ASC) AS rn
    FROM X
) t
WHERE rn = 1;

这里PARTITION BY Type按Type分组,ORDER BY Id ASC让每个组里Id最小的行排在最前,最后取rn=1的行就是目标结果。

方法2:GROUP BY + 子查询(兼容老版本数据库)

先通过GROUP BY获取每个Type对应的最小Id,再关联原表拿到完整的行数据:

SELECT x.Id, x.Type, x.Name
FROM X x
JOIN (
    SELECT Type, MIN(Id) AS MinId
    FROM X
    GROUP BY Type
) t ON x.Type = t.Type AND x.Id = t.MinId;

子查询先算出每个Type的最小Id,再用JOIN匹配原表中对应Id的行,同样能得到你要的结果。

方法3:关联子查询(逻辑直观的写法)

直接判断当前行的Id是否是对应Type的最小Id,是则保留:

SELECT Id, Type, Name
FROM X x
WHERE Id = (
    SELECT MIN(Id)
    FROM X
    WHERE Type = x.Type
);

这几种方法都能满足你的需求,选适合你数据库环境的就行~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:25:23