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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 18:39:00