从每组重复项中选择一行

时间:2014-05-29 03:16:05

标签: sql oracle oracle-sqldeveloper

模拟表格

enter image description here

我需要从第一个表中删除重复记录。如果我们有重复的address_num,例如100,我们将使用AddressType" Home"行。

请注意,address_num不包含3个或更多的副本;它们要么在表格中出现一次,要么两次。例如,address_num 200出现一次。因此,我们只是按原样抓住它。

ID列是主键。

具有正确复选标记的第二个表是结果表。如何编写打印出第二个表的oracle SQL查询?

3 个答案:

答案 0 :(得分:2)

您可以使用row_number()并智能使用order by

来执行此操作
select t.*
from (select t.*,
             row_number() over (partition by address_num
                                order by (case when AddressType = 'Home' then 1 else 0 end) desc
                               ) as seqnum
      from table t
     ) t
where seqnum = 1;

答案 1 :(得分:0)

类似的东西:

SELECT id, address_num, ...
FROM (
    SELECT id, address_num, ...
         , row_number() over (partition by address_num
                              order by addresstype) as rn
    FROM T
) AS X
WHERE rn = 1

答案 2 :(得分:0)

仅选择每组Dupes中ID最低的行。

 Select * From MockUpTable m
 Where Id = 
     (Select Min(id)
      From MockUpTable
      Where address_num = m.address_num)