2009-03-03 11 views
5

Z kopii zapasowej bazy danych mam rekordy bez unikalnych identyfikatorów.Usuń nieunikalne rzędy ids

Niektóre rekordy mają unikalne identyfikatory. Niektóre rekordy ze zduplikowanymi identyfikatorami zawierają różne wartości DateCreated. Niektóre rekordy ze zduplikowanymi identyfikatorami zawierają te same wartości DateCreated.

Próbuję uzyskać zapytanie MSSql 2005 pozostawi tylko unikatowe wartości ID z najnowszą wartością DateCreated.

Od

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

Aby

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

Pomoc

Odpowiedz

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

czyli usunąć dowolny wiersz, gdzie istnieje inny wiersz z tym samym identyfikatorem i późniejszej daty utworzenia.

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 
Powiązane problemy