Oracle SQL中基于优先级按key返回单条记录的实现问题
Oracle SQL实现方案
实现思路
- 第一步先过滤无效行:仅保留
type_id为1、2、3的记录,null和其他取值的行直接排除 - 第二步用窗口函数
ROW_NUMBER()对同一个id下的记录按type_id升序排序,刚好匹配1>2>3的优先级规则 - 第三步仅取每个
id分组下排序为1的记录即可
参考SQL代码
SELECT id, name, type_id FROM ( SELECT id, name, type_id, ROW_NUMBER() OVER(PARTITION BY id ORDER BY type_id ASC) rn FROM your_table -- 此处替换为实际业务表名 WHERE type_id IN (1,2,3) ) t WHERE rn = 1;
补充说明
如果同一个id下存在多条相同优先级的type_id记录(比如两条type_id=1的行),可以在ORDER BY后补充其他排序规则(例如ORDER BY type_id ASC, 其他业务字段 ASC)来明确取哪条,避免随机返回结果。
内容的提问来源于stack exchange,提问作者alinz
相关产品推荐
相关产品推荐

