Удаление повторяющихся строк, сохранение самой последней строки по максимальному (datetime) - PullRequest
0 голосов
/ 18 декабря 2018

Оператор MySQL ниже выбирает все строки, которые имеют дубликаты, на основе ADDRESS1 и POSTCODE, из которых самая последняя строка - INSPECTION_DATE.По сути, он выбирает все те, которые я хочу сохранить.

SELECT COUNT(*), MAX(INSPECTION_DATE), ADDRESS1, POSTCODE, id
FROM epc 
GROUP BY ADDRESS1, POSTCODE 
HAVING COUNT(*) > 1;

Мой вопрос состоит в том, как удалить все старые дубликаты, сохраняя те, которые возвращает вышеприведенный оператор.

1 Ответ

0 голосов
/ 18 декабря 2018

http://sqlfiddle.com/#!9/8de866/1

DELETE  e
FROM epc e
INNER JOIN epc max_
ON e.address1 = max_.address1
   AND e.postcode = max_.postcode
   AND e.inspection_date < max_.inspection_date;

ОБНОВЛЕНИЕ http://sqlfiddle.com/#!9/5bd5981/1

DELETE  e
FROM epc e
INNER JOIN epc max_
ON e.address1 = max_.address1
   AND e.postcode = max_.postcode
   AND (e.inspection_date < max_.inspection_date
        OR (e.inspection_date = max_.inspection_date
           AND e.id < max_.id));
...