SQL - удалить все дубликаты и сохранить только один - PullRequest
0 голосов
/ 02 мая 2020

У меня есть таблица, как показано ниже

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? Нужно ли создавать временную таблицу?

Спасибо!

Ответы [ 3 ]

1 голос
/ 02 мая 2020

Должно быть работает.

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
1 голос
/ 02 мая 2020

Пожалуйста, попробуйте этот запрос ниже, он должен работать как ваши требования,

delete from CUSTOMER
where rowid not in
(select max(rowid) from CUSTOMER group by order_amount);
0 голосов
/ 02 мая 2020

Я не думаю, что в Redshift есть способ идентифицировать строки, если все данные одинаковы. Итак, я думаю, что вам лучше всего воссоздать таблицу:

create table temp_mytable as
    select distinct *
    from mytable;

truncate table mytable;

insert into mytable
    select *
    from distinct mytable;

Если бы у вашей таблицы действительно был первичный ключ, были бы альтернативные способы удаления строк.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...