我有一个表中有一些重复的行.我想只删除一个重复的行.
例如,我有9个重复的行,所以应该只删除一行,并且应该显示8个剩余的行.
例
日期调用称为持续时间戳
2012-06-19 10:22:45.000 165 218 155 1.9 121
2012-06-19 10:22:45.000 165 218 155 1.9 121
2012-06-19 10:22:45.000 165 218 155 1.9 121
2012-06-19 10:22:45.000 165 218 155 1.9 121
从上面的日期应该只删除一行,并应显示3行
2012-06-19 10:22:45.000 165 218 155 1.9 100
2012-06-19 10:22:45.000 165 218 155 1.9 100
2012-06-19 10:22:45.000 165 218 155 1.9 100
从上面的日期应该只删除一行,并应显示2行
我怎样才能做到这一点?
此解决方案允许您从每组重复项中删除一行(而不是一次只处理一个重复项块):
;WITH x AS 
(
  SELECT [date], rn = ROW_NUMBER() OVER (PARTITION BY 
    [date], calling, called, duration, [timestamp]
    ORDER BY [date])
  FROM dbo.UnspecifiedTableName
)
DELETE x WHERE rn = 2;
顺便说一句,无论是[date]和[timestamp]是列名可怕的选择...
表上有主键吗?
是什么使一行重复?同时?同一日期?所有列都相同吗?
如果您有主键,则可以使用 TOP 函数仅选择一条记录并删除该行:
Delete from [tablename] where id in (select top 1 id from [tablename] where [clause])
| 归档时间: | 
 | 
| 查看次数: | 17581 次 | 
| 最近记录: |