回答

收藏

根据列上的相同值删除被视为重复的记录,并保持最新记录

技术问答 技术问答 118 人阅读 | 0 人回复 | 2023-09-13

我想删除在某些列中基于相同值的被视为重复的记录,并在下面的示例中保留一个基于InsertedDate的最新记录。我想要一个不使用游标而是基于设置的解决方案。目标:删除所有重复项并保持最新。! g! i8 Q$ D/ I  [2 w9 j
下面的ddl创建了一些重复项。需要删除的记录为:John1和John2,因为它们具有与John3相同的ID,而John3是最新的记录。; {8 h2 {, Q  t3 {  O' G
另外,需要删除记录John5,因为还有另一条ID = 3且较新的记录(John6)。3 N, K2 _2 T" R4 @7 h; k% z
Create table dbo.TestTable (ID int, InsertedDate DateTime, Name varchar(50))
" ^" O( p- Y0 q! iInsert into dbo.TestTable Select 1, '07/01/2009', 'John1'" k4 ]0 w! B2 T" `. T' ?5 H0 t1 g' W
Insert into dbo.TestTable Select 1, '07/02/2009', 'John2'9 q% o# W! Z" n( o
Insert into dbo.TestTable Select 1, '07/03/2009', 'John3'
* B) d5 o$ H) k6 YInsert into dbo.TestTable Select 2, '07/03/2009', 'John4'
$ m7 n( M9 X! _& O% |+ {; kInsert into dbo.TestTable Select 3, '07/05/2009', 'John5'
  Y+ M  M9 c6 k7 V! u/ zInsert into dbo.TestTable Select 3, '07/06/2009', 'John6'+ v- x; j) ?0 y6 D+ Y  v& H' \; V9 T) y
                * i& }9 y9 B: N8 ?
解决方案:+ t- W7 c: j" o8 i6 m
               
( c! e3 Z3 J, e
7 @5 f, s) k+ P8 j$ `. M5 `3 e( m
- O* t) M6 `+ Y3 D7 C                这有效:+ A) I6 a2 r+ A
delete t % _; z' @0 P9 R% l6 T1 A$ t
from TestTable t
1 B9 H2 l/ F- H7 \$ [: \, ?1 A! rleft join
" Y) B9 s1 L& x(9 R  I  }% s( ~* m) z1 C1 a; M+ ]
    select id, InsertedDate = max(InsertedDate) from TestTable  o' e9 @* K+ d: c, S/ y; H7 l
    group by id, P, {. }* x& r7 r! u
) as sub on sub.id = t.id and sub.InsertedDate = t.InsertedDate
% y" M" ~+ \# u, o6 q' r* lwhere sub.id is null
; c- r; c- r" k( n3 I如果您必须处理领带,那会有些棘手。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则