Обновить данные для дубликатов
Есть таблица заказов, в ней имеются дублирующиеся заказы
orders
uuid | user_uuid | product_uuid | created_at | status
Есть статусы 5 - archived и 6 - cancelled
Суть в чем - надо обновить все дубликаты, переместив в cancelled все дублирующиеся заказы кроме самого нового
Пробовал сделать так
update orders o
join
(
select user_uuid, product_uuid, max(created_at) date, count(*) count
from orders
where user_uuid is not null and status_id not in (5, 6)
group by user_uuid, product_uuid
having count > 1
) dup
on o.user_uuid = dup.user_uuid
and o.product_uuid = dup.product_uuid
and o.created_at != dup.date
set status_id = 6
where o.uuid is not null;
Но есть проблема - у некоторых заказов даты идентичны и в таком случае такие заказы не обновляются. Может у кого есть мысль как это дело можно обновить чтобы заработало?
Ответы (1 шт):
Автор решения: Alex
→ Ссылка
Помощь от Akina:
- Добавляем временное int поле в таблицу
- Записываем значения от 1 до n
- Используем это поле как дополнительный критерий сортировки
Пример: https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=ac6053eb752cc4960b28164aa11e02a6