Удаление строк неуникальных идентификаторов

StackOverflow https://stackoverflow.com/questions/608602

  •  03-07-2019
  •  | 
  •  

Вопрос

Из резервной копии базы данных у меня есть записи без уникальных идентификаторов.

Некоторые записи имеют уникальные идентификаторы.Некоторые записи с дублирующимися идентификаторами содержат разные значения, созданные DateCreated.Некоторые записи с дублирующимися идентификаторами содержат одни и те же значения, созданные DateCreated.

Я пытаюсь получить запрос MSSql 2005, который оставит только уникальные значения ID с самым последним значением DateCreated.

От

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

Для

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

Справка

Это было полезно?

Решение

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

т.е. удалите любую строку, где есть другая строка с тем же идентификатором и более поздней датой создания.

Другие советы

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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top