sql - 删除没有唯一标识符的重复行

标签 sql sql-server

我的表格中有一些数据,大致如下所示:

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/

相关文章:

sql-server - MS SQL Server - 列出所有 session 上下文值

sql - 捕获前 5 行并组合其余的 SQL Server

mysql - 将范围合并到 MySQL 的单列中?

sql - 请解释一下所附的查询

sql-server - T-SQL : Turn off certain Intellisense suggestions

c# - 向数据表添加列并添加数据

sql - 如何删除重复条目?

sql - 我想在我现有的配置单元表中添加一个额外的列,以便我可以获得当天的当前时间戳

sql - 如何在 SQL Server 中生成并手动插入唯一标识符?

c# - 调用目标抛出异常 - 在 Visual Studio 中执行 .dtsx 文件时