SQL: удаление дублей записей в таблице
Ну задача написания нужного запроса сводится к следующим шагам:
- Сделаем выборку записей, сгруппировав по дублирующемуся полю. Получим количество дублей, и максимальный id дубля (чтобы знать какой удалять)
- Если количество записей больше 1, то запись с максимальным id удалим
В итоге запрос может получится примерно таким:
1 2 3 4 5 |
delete from ls_indications where id in ( select max_id from ( select count(ls) as cnt,max(id) as max_id from ls_indications where period='2025-03-01' group by ls ) as zxc where zxc.cnt>1 ) |
P.S. Если дублей больше 2-х, то запрос нужно выполнить несколько раз, т.к. он удаляет за один раз только одну дублирующуюся запись. Можно конечно наваять скрипт, который этот недостаток убирает, но смысла обычно нет, проще запрос выполнить несколько раз