2009-03-03 20 views
5

Desde una copia de seguridad de la base de datos, tengo registros sin Ids únicos.Eliminar filas de identificadores no únicos

Algunos registros tienen identificaciones únicas. Algunos registros con ID duplicados contienen diferentes valores DateCreated. Algunos registros con ID duplicados contienen los mismos valores DateCreated.

Estoy tratando de obtener una consulta de MSSql 2005 solo dejará valores únicos de ID con el valor más reciente de DateCreated.

De

ID| DateCreated 
1 | 1/1/09 
2 | 1/2/09 
2 | 2/2/09 
3 | 1/3/09 
3 | 1/3/09 

Para

ID| DateCreated 
1 | 1/1/09 
2 | 2/2/09 
3 | 1/3/09 

Ayuda

Respuesta

10
DELETE FROM myTable AS t1 
WHERE EXISTS (
    SELECT 1 FROM myTable AS t2 
    WHERE t1.ID=t2.ID AND t1.DateCreated<t2.DateCreated) 

es decir, eliminar cualquier fila donde hay otra fila con el mismo ID y una fecha de creación posterior.

0
create table #t (id int, date datetime) 

insert #t 
values(1, getdate()) 

insert #t 
values(1, getdate()+1) 

insert #t 
values(1, getdate()-1) 

insert #t 
values(2, getdate()) 

insert #t 
values(2, getdate()+1) 

delete t 
from #t t 
left join (select id, min(date) as date from #t group by id) as t1 
    on t.id = t1.id and t1.date = t.date 
where t1.date is null 
Cuestiones relacionadas