我有一个表中有一些重复的行.我想只删除一个重复的行.
例如,我有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
Run Code Online (Sandbox Code Playgroud)
从上面的日期应该只删除一行,并应显示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
Run Code Online (Sandbox Code Playgroud)
从上面的日期应该只删除一行,并应显示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;
Run Code Online (Sandbox Code Playgroud)
顺便说一句,无论是[date]
和[timestamp]
是列名可怕的选择...
表上有主键吗?
是什么使一行重复?同时?同一日期?所有列都相同吗?
如果您有主键,则可以使用 TOP 函数仅选择一条记录并删除该行:
Delete from [tablename] where id in (select top 1 id from [tablename] where [clause])
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
17581 次 |
最近记录: |