SQL-删除所有重复项并仅保留一个

SQL-删除所有重复项并仅保留一个,sql,amazon-redshift,Sql,Amazon Redshift,我有一张像下面这样的桌子 Order_Id (PK), Customer_ID, Order_Amount A01 AA01 100 A01 AA01 100 (duplicate) A02 AA01 200 A03 AA02 300 我想删除副本并保留剩余的一个 我可以使用下面的选项选择副本 select * from

我有一张像下面这样的桌子

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中删除此记录的下一步是什么?我需要创建一个临时表吗


谢谢

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

create table temp_mytable as
    select distinct *
    from mytable;

truncate table mytable;

insert into mytable
    select *
    from distinct mytable;

如果您的表确实有主键,那么可以使用其他方法删除行。

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

create table temp_mytable as
    select distinct *
    from mytable;

truncate table mytable;

insert into mytable
    select *
    from distinct mytable;
如果您的表确实有主键,那么可以使用其他方法删除行。

应该可以

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
这应该是一种工作

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

请尝试下面的查询,它应符合您的要求

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

请尝试下面的查询,它应符合您的要求

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

order\u id
如果重复则不是主键。
order\u id
如果重复则不是主键。