Remover linhas ids não-exclusivo
-
03-07-2019 - |
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
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