我在表中有一些数据,去大致如下:0 Z F1 ~2 c3 d4 S
table stockData(tickId int not null,timestamp datetime not null,price decimal(18,5) not null)tickId和timestamp但是tickId和timestamp组合应该是唯一的。 X5 g; w6 h9 G9 J% s& O
我的表中有一些重复的数据,我试图删除它们。然而,我得出结论,给定数据的信息不足以区分另一行,基本上没有办法删除重复的行之一。我的猜测是,我需要引入一个身份列,这将帮助我从另一行识别一行。 ( ^5 t4 Q2 |9 L; N2 h这是正确的,还是有一种神奇的方法可以删除重复查询中的一个,但不是所有的重复数据? " j( ~( p+ [ `) G) y编辑 编辑澄清tickId和timestamp组合应该是唯一的,但这不是因为重复的数据。 & d; |# S1 r0 [' N% t 7 A* Y, a/ u7 h" H9 x3 L 解决方案: $ T! D f: b: ~, M# k: J0 D+ D 这是一个查询,它将删除重复项,并在每一行中只保留一个副本。SQL Server 2005或更高版本一起使用:! y) f7 O" D# {) l. n
WITH Dups AS( SELECT tickId,timestamp,price, ROW_NUMBER() OVER(PARTITION BY tickid,timestamp ORDER BY (SELECT 0)) AS rn FROM stockData)DELETE FROM Dups WHERE rn >