我的表格中有一些数据,大致如下所示:
table stockData
(
tickId int not null,
timestamp datetime not null,
price decimal(18,5) not null
)
tickId 和时间戳都不是唯一的,但是tickId 和时间戳的组合应该是唯一的。
我的表中有一些重复的数据,我正在尝试将其删除。然而,我得出的结论是,给定的数据没有足够的信息来区分一行和另一行,而且基本上没有办法只删除其中一个重复行。我的猜测是,我需要引入某种标识列,这将帮助我识别一行与另一行。
这是正确的吗?或者是否有某种神奇的方法可以通过查询删除一个但不是两个重复数据?
编辑编辑以澄清tickId和时间戳组合应该是唯一的,但这并不是因为重复的数据。
最佳答案
这是一个查询,它将删除重复项并保留每个唯一行的一个副本。它将与 SQL Server 2005 或更高版本一起使用:
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 > 1
关于sql - 删除没有唯一标识符的重复行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9862609/