Remove duplicate rows in a table

前端 未结 3 1185
日久生厌
日久生厌 2020-12-11 13:21

I have a table contains order information like below:

Order table:

As we can see from that table, each order_no has several duplicates. So

相关标签:
3条回答
  • 2020-12-11 13:29

    This should work, even in your ancient and outdated Oracle version:

    delete from order_table
    where rowid not in  (select min(rowid)
                         from order_table
                         group by order_no);
    
    0 讨论(0)
  • 2020-12-11 13:30

    If you don't care which row you get for each order_no, perhaps the simplest solution (before Oracle 12) is:

    select [whatever columns you want, probably not rn - see below]
    from ( select order_table.*,
                  row_number() over (partition by order_no order by null) as rn
         )
    where rn = 1
    ;
    
    0 讨论(0)
  • 2020-12-11 13:38

    Here is a query to remove semi-duplicates with precise order by differing field:

    delete from message_part
    where ts >= since and ts < since + 1
        and rowid not in (
            select distinct first_value(rowid) over (partition by id order by differing_field)
            from message_part where ts >= since and ts < since + 1
        );
    

    Credits go to @a_horse_with_no_name and Oracle equivalent of Postgres' DISTINCT ON?

    0 讨论(0)
提交回复
热议问题