代码之家  ›  专栏  ›  技术社区  ›  sre

删除非唯一ID行

  •  5
  • sre  · 技术社区  · 17 年前

    从数据库备份中,我有没有唯一ID的记录。

    有些记录具有唯一的ID。 某些具有重复ID的记录包含不同的日期创建值。 某些ID重复的记录包含相同的日期创建值。

    我正在尝试获取一个MSSQL2005查询将只留下唯一的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
    

    帮助

    2 回复  |  直到 17 年前
        1
  •  10
  •   DJ.    17 年前
    DELETE FROM myTable AS t1 
    WHERE EXISTS (
        SELECT 1 FROM myTable AS t2 
        WHERE t1.ID=t2.ID AND t1.DateCreated<t2.DateCreated)
    

    也就是说,如果有另一行具有相同的ID和更晚的创建日期,则删除该行。

        2
  •  0
  •   Sam Saffron James Allen    17 年前
    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