2009-03-03 7 views
5

À partir d'une sauvegarde de base de données, j'ai des enregistrements sans ID uniques.Suppression des lignes d'ID non uniques

Certains enregistrements ont des ID uniques. Certains enregistrements avec des ID dupliqués contiennent différentes valeurs DateCreated. Certains enregistrements avec des ID dupliqués contiennent les mêmes valeurs DateCreated.

J'essaie d'obtenir une requête MSSql 2005 ne laissera que des valeurs d'ID uniques avec la valeur DateCreated la plus récente.

De

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

Pour

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

Aide

Répondre

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

-à-dire, supprimer une ligne où il y a une autre ligne avec le même identifiant et une date de création plus tard.

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 
Questions connexes