Question

À partir d'une sauvegarde de base de données, j'ai des enregistrements sans identifiant unique.

Certains enregistrements ont des identifiants uniques. Certains enregistrements avec des ID en double contiennent différentes valeurs DateCreated. Certains enregistrements avec des ID en double contiennent les mêmes valeurs DateCreated.

J'essaie d'obtenir une requête MSSql 2005 ne laissera que des valeurs d'ID unique 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

Était-ce utile?

La solution

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

En d'autres termes, supprimez toute ligne contenant une autre ligne avec le même identifiant et une date de création ultérieure.

Autres conseils

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top