如何用SQL获取指定两列(ID、value)的唯一值?
提取ID和value列的唯一值方案
问题根源
你之前用SELECT DISTINCT没达到预期,大概率是把第三列也包含在查询里了——数据库会把所有选中列的组合完全相同才判定为重复,第三列的不同值会让ID+value相同的行被当成不同结果。
直接获取ID+value唯一组合
如果只需要ID和value的唯一配对,直接指定这两列用DISTINCT即可:
SELECT DISTINCT ID, value FROM 你的表名;
需保留第三列时的处理
如果要保留每组ID+value对应的某一行(比如取第三列的最新/最大值),可以用两种方式:
- GROUP BY + 聚合函数
SELECT ID, value, MAX(第三列名) AS 第三列名 FROM 你的表名 GROUP BY ID, value;
这里用MAX()取第三列的最大值,换成MIN()、LAST_VALUE()等可根据需求调整。
- 窗口函数筛选唯一行
如果需要更灵活的筛选规则(比如按第三列排序后取第一行),用窗口函数:
WITH 分组排序 AS ( SELECT ID, value, 第三列名, ROW_NUMBER() OVER (PARTITION BY ID, value ORDER BY 第三列名 DESC) AS 行号 FROM 你的表名 ) SELECT ID, value, 第三列名 FROM 分组排序 WHERE 行号 = 1;
ORDER BY 第三列名 DESC可以改成你需要的排序规则,比如按时间排序取最新的。
内容的提问来源于stack exchange,提问作者Kalixon
相关产品推荐
相关产品推荐

