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
如果重复则不是主键。