消除类似的行但具有特定值

时间:2012-12-03 04:56:30

标签: sql oracle11g analytic-functions

我有用户表和user_group表。单个用户可以在多个组中。我有两个组admin和user。管理员组具有组ID 1,用户组具有组ID 2.当我选择加入这两个表时。我想使用两个表之间的连接来选择它:

select * from users u
join user_groups ug
on u.user_id = ug.user_id;

我在每一行都有两次管理员。我想消除管理员的其他行,其中组ID为用户,即在此查询中1如何才能实现此目的? sqlfiddle here。组相关信息位于all_groups表中。

1 个答案:

答案 0 :(得分:1)

假设您要保留具有最大group_id

的行
select *
  from (select u.user_id,
               u.username,
               u.first_name,
               u.middle_name,
               u.last_name,
               u.password,
               ug.group_id,
               rank() over (partition by ug.user_id
                                order by ug.group_id desc) rnk
          from users u
               join user_groups ug
                 on u.user_id = ug.user_id)
 where rnk = 1;

应该有效。这是sqlfiddle