您的位置:首页 > 数据库 > Oracle

oracle去重复的列的sql row_number() over( partition by)

2012-01-05 09:48 537 查看
with cte as(
select  t.base_group_id,t.base_task_agent_id,t.user_id,g.base_role_id,r.role_name,g.base_org_id,o.name_,t.ben_time,t.end_time
from base_task_agent t,base_role r,base_organization o,base_group g,base_user u
where u.user_id =756550 and u.user_id = t.user_id and t.base_group_id = g.base_group_id and g.base_role_id = r.role_id and g.base_org_id = o.org_id and t.end_time > to_Date('2012-01-05', 'yyyy-MM-dd')
)
select * from (
select t.*,row_number() over (partition by base_group_id order by base_task_agent_id) rid from cte t
) a  where rid=1


简单解释一下 with cte as() 括号内的内容 就是查询的sql 结果 其中包含重复数据,单纯的distinct无法解决 order by也不知怎么搞 于是用with as() 创建一个临时表 cte为临时表的名字

然后

select t.* ,row_number() over(partition by base_group_id order by base_task_agent_id) rid from cte t 这句sql的意思是 查询临时表cte 别名为t row_number() over(partition by 需要检索重复的列 order by 排序的列名) 别名为 rid form cte t

这时候查询就会获得一个rid列 如果base_group_id存在多条相同值就以1开始递增

select * from (↑) a where rid = 1 筛选rid为1 也就是base_group_id只出现一次的数据 这就是去重复了 高人指点 感谢
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐