【问题标题】:SQL - Remove all duplicates and retain just oneSQL - 删除所有重复项并仅保留一个
【发布时间】:2020-05-02 02:14:53
【问题描述】:

我有一张像下面这样的表格

Order_Id (PK), Customer_ID, Order_Amount
  A01             AA01         100
  A01             AA01         100 (duplicate)
  A02             AA01         200
  A03             AA02         300

我想删除重复的并保留剩余的

我可以使用下面的方法选择副本

select *
from 
(
select order_id, customer_id, order_amount, row_number () over (partition by order_id order by order_Id) as rnk
from mytable
) where rnk > 1

但是从 mytable 中删除这条记录的下一步是什么?我需要创建一个临时表吗?

谢谢!

【问题讨论】:

  • order_id 如果重复则不是主键。

标签: sql amazon-redshift


【解决方案1】:

应该可以了。

SELECT *
FROM 
(
  SELECT 
     order_id, 
     customer_id, 
     order_amount, 
     row_number () OVER (partition by order_id order by order_Id) as rnk
  FROM mytable
  GROUP BY order_id
) WHERE rnk > 1

【讨论】:

    【解决方案2】:

    请尝试下面的查询,它应该可以满足您的要求,

    delete from CUSTOMER
    where rowid not in
    (select max(rowid) from CUSTOMER group by order_amount);
    

    【讨论】:

      【解决方案3】:

      如果所有数据都相同,我认为 Redshift 无法识别行。所以,我认为你最好的办法是重新创建表格:

      create table temp_mytable as
          select distinct *
          from mytable;
      
      truncate table mytable;
      
      insert into mytable
          select *
          from distinct mytable;
      

      如果您的表确实有一个主键,那么还有其他删除行的方法。

      【讨论】:

        猜你喜欢
        • 2011-08-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-27
        • 2020-03-05
        • 1970-01-01
        • 2020-08-04
        • 1970-01-01
        相关资源
        最近更新 更多