如何根据多个参数从select查询中删除重复的记录?
我有一个返回这些的复杂查询,我需要删除基于IdRow, IdAudience和IdAb的重复项,所以在下面的情况下,我需要删除id 1和3:
<表类>
Id
IdRow
IdAudience
IdAb
数量
tbody><<tr>1 空 空 2836 1 2空 空 2836 1 3 560540 空 空 77 4560540 空 空 77 表类>
您可以使用一个简单的聚合方法:
SELECT MAX(Id) AS Id, IdRow, IdAudience, IdAb, Quantity
FROM yourTable
GROUP BY IdRow, IdAudience, IdAb, Quantity
ORDER BY 1;
假设给定一组2个或更多的副本,您希望保留具有最大Id
值的单个记录。
当然也可以使用流行的ROW_NUMBER()函数来过滤掉重复项:
;WITH CTE AS
(
SELECT * , ROW_NUMBER() OVER(PARTITION BY IdRow, IdAudience,IdAb ORDER BY Id DESC) RN
FROM yourTable
)
DELETE FROM CTE
WHERE RN > 1
可以在子查询中这样写
delete from yourtable where Id not in
(
SELECT top 1000 MAX(Id) AS Id
FROM yourtable
GROUP BY IdRow, IdAudience, IdAb, Quantity
ORDER BY Id
)