Eliminar registros duplicados dejando uno de muestra
Para eliminar registros duplicados según uno o varios campos, pero dejando uno de muestra podemos hacer la comparativa de los datos duplicados sobre la misma tabla.
Ejemplo
Imaginemos una tabla de empleados de una empresa con la asignación a una taquilla dentro del vestuario. Queremos controlar las fechas de alta y baja de cada usuario por las diferentes taquillas, pero notamos que hay varias duplicidades, con usuarios que tienen asignada dos veces o más la misma taquilla, ya sea en la mima fecha de alta o diferente (pero entonces no tienen fecha de baja.
Consulta para averiguar qué empleados y taquillas son los repetidos
Select Dni,CodTaquilla, Count(*) As TotalEntradas From TrabajadoresTaquillas
Where Baja Is Null
Group by Dni,Codtaquilla Having Count(*) >1 Order By CodTaquilla
Consulta para eliminar registros duplicados dejando uno de muestra
Delete N1 FROM TrabajadoresTaquillas N1, TrabajadoresTaquillas N2
WHERE N1.CodTaquilla = N2.CodTaquilla And N1.Dni = N2.Dni And
N1.Baja is Null And N1.Id>N2.Id
En este caso elimina los duplicados por Dni y CodTaquilla y que no hayan sido dados de baja. El N1.Id>N2.Id hace que el que NO se elimine sea el que tiene el Id menor, por lo que el registro que queda es el primero que se introdujo.
Página de Referencia:
https://andalinux.wordpress.com/2013/04/15/sql-eliminar-entradas-duplicadas-dejando-una-de-muestra/