如何基于另一列的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
相关产品推荐
相关产品推荐

