我需要从表中删除重复删除重复:使用分区由SQL Server
;WITH cte as(
SELECT ROW_NUMBER() OVER (PARTITION BY [specimen id]
ORDER BY (SELECT 0)) RN
FROM quicklabdump)
delete from cte where RN>1
列quicklabdumpID
是主键。
我想知道如何只保留其中也有[specimen id]
我需要从表中删除重复删除重复:使用分区由SQL Server
;WITH cte as(
SELECT ROW_NUMBER() OVER (PARTITION BY [specimen id]
ORDER BY (SELECT 0)) RN
FROM quicklabdump)
delete from cte where RN>1
列quicklabdumpID
是主键。
我想知道如何只保留其中也有[specimen id]
通过向quicklabdumpid DESC
更改为了最大quicklabdumpID
。
WITH cte as(
SELECT ROW_NUMBER() OVER (PARTITION BY [specimen id]
ORDER BY quicklabdumpid DESC) RN
FROM quicklabdump)
delete from cte where RN>1
无需多次出现的分区
delete q
from quicklabdump q
where exists
(
select *
from quicklabdump q2
where q2.[specimen id] = q.[specimen id] and
q2.quicklabdumpID > q.quicklabdumpID
)
只是好奇,你是从'quicklabdump'这里删除,@I__是从'cte'删除吗? – cctan 2012-02-03 02:18:08
@cctan - cte是使用with语句设置的别名。 – 2012-02-03 03:44:25
@ClintGood非常感谢你。如果有超过2个重复的[样本ID],您能否告诉我我需要运行几次?例如spec123,spec123和spec123,使用quicklabdumpid 1,2,3 – 2012-02-03 04:23:07
非常感谢。你能告诉我克林特解决方案有什么问题吗? – 2012-02-03 17:47:49
@I__ - 它也会这样做。性能可能有所不同。如果你想知道哪一个会更快,你必须对你的数据进行测试。 – 2012-02-03 18:03:14