Mysql
 sql >> Base de données >  >> RDS >> Mysql

Trouver les doublons d'ID les plus récents avec MySQL

Eh bien, vous répondez en quelque sorte à votre question. Vous semblez vouloir max(id) :

SELECT email, COUNT(email) AS occurences, max(id)
FROM wineries
GROUP BY email
HAVING (COUNT(email) > 1);

Vous pouvez supprimer les autres à l'aide de l'instruction. Supprimer avec join a une syntaxe délicate où vous devez d'abord lister le nom de la table, puis spécifier le from clause avec la jointure :

delete wineries
            from wineries join
            (select email, max(id) as maxid
             from wineries
             group by email
             having count(*) > 1
            ) we
            on we.email = wineries.email and
               wineries.id < we.maxid;

Ou écrire ceci comme un exists clause :

delete from wineries
    where exists (select 1
                  from (select email, max(id) as maxid
                        from wineries
                        group by email
                       ) we
                  where we.email = wineries.email and wineries.id < we.maxid
                 )