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

如何基于另一列的distinct值提取对应列的首个匹配值?

问题解决:获取第二列每个唯一值对应的首个第一列取值

首先明确前提:SQL本身不存在默认的「自然行顺序」,本题示例中的「首个匹配行」指每组Second Column下最先出现的First Column值,对应可按First Column升序排序取首位实现,如果你有自增ID、插入时间等能标识行先后顺序的字段,替换下文的排序字段即可。


通用解法(支持所有支持窗口函数的数据库:MySQL 8.0+/PostgreSQL/SQL Server/Oracle等)

SELECT `First Column`, `Second Column`
FROM (
    SELECT 
        `First Column`,
        `Second Column`,
        -- 按第二列分组,组内按排序规则给行编号
        ROW_NUMBER() OVER (PARTITION BY `Second Column` ORDER BY `First Column` ASC) AS row_num
    FROM 你的表名
) AS temp_table
WHERE row_num = 1;

MySQL 5.x 低版本兼容解法

低版本MySQL不支持窗口函数,可直接用分组聚合实现需求:

SELECT MIN(`First Column`) AS `First Column`, `Second Column`
FROM 你的表名
GROUP BY `Second Column`;

注意该解法仅适用于要取的首个First Column为组内最小值的场景。


PostgreSQL 专属简化写法

PostgreSQL支持DISTINCT ON语法,可以更简洁的实现需求:

SELECT DISTINCT ON (`Second Column`) `First Column`, `Second Column`
FROM 你的表名
ORDER BY `Second Column`, `First Column` ASC;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 11:06:03