Pergunta

A partir de um backup de banco de dados Eu tenho registros sem identificações exclusivas.

Alguns registros têm IDs exclusivos. Alguns registros com IDs duplicados contém diferentes valores DateCreated. Alguns registros com IDs duplicados contém os mesmos valores DateCreated.

Eu estou tentando obter uma consulta MSSql 2005 vai deixar valores de ID única únicas com o valor mais recente 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

Ajuda

Foi útil?

Solução

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

ou seja, excluir qualquer linha onde há uma outra linha com o mesmo ID e uma data de criação mais tarde.

Outras dicas

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top