如何在SQL Developer中匹配行号与表并筛选唯一组合行
解决基于自定义组合筛选唯一行的问题
首先你的原有SQL存在两个问题:
- 嵌套的
(select * from my_table)子查询完全多余,属于无效写法 - 直接生成的
rownum是查询结果的临时行号,无法关联回原表获取对应行的完整数据
要实现按code||'_'||indicator||'_'||length组合去重,保留每个组合的一行完整数据,推荐用窗口函数ROW_NUMBER()来实现,具体步骤如下:
实现思路
- 用
ROW_NUMBER()按目标组合分组,给每个分组内的行分配序号 - 筛选出每个分组里序号为1的行,就是该组合的唯一行
完整SQL代码
SELECT * FROM ( SELECT t.*, ROW_NUMBER() OVER (PARTITION BY code||'_'||indicator||'_'||length ORDER BY 1) AS rn FROM my_table t ) WHERE rn = 1;
说明
PARTITION BY code||'_'||indicator||'_'||length:按你定义的组合字段分组ORDER BY 1:这里的1表示按原表默认顺序取第一行,你可以替换成具体字段(比如id、create_time)来指定保留分组内的哪一行- 外层筛选
rn=1,就能得到每个组合的唯一行,同时保留原表的所有列
内容的提问来源于stack exchange,提问作者mandu J.
相关产品推荐
相关产品推荐

