SQL Server版本
使用service_date ='2018-08-29 13:05:00.000'删除所有重复行(第3行到第18行),但保留最旧的行(第2行),当然还要保留第1行,因为其服务日期不同。不要介意create_timestamp或document_file,因为它是同一位客户。有想法吗?
答案 0 :(得分:7)
在SQL Server中,我们可以尝试使用CTE进行删除:
WITH cte AS (
SELECT *,
ROW_NUMBER() OVER (PARTITION BY service_date ORDER BY create_timestamp) rn
FROM yourTable
)
DELETE
FROM cte
WHERE rn > 1;
此处的策略是为共享同一service_date
的每组记录分配一个行号,其中1个分配给该组中最老的记录。然后,我们可以通过仅定位行号更大大于1的所有记录来表述删除。
答案 1 :(得分:1)
您不需要使用分区功能。请使用以下查询以提高性能。我已经测试了它的正常工作。
with result as
(
select *, row_number() over(order by create_timestamp) as Row_To_Delete from TableName
)
delete from result where result.Row_To_Delete>2
答案 2 :(得分:0)
我认为您希望按客户删除这些数据
我的意思是,如果客户不同,您将希望保留相同日期的条目
如果您需要在partition by子句中添加用于标识duplicate rows in SQL的Customer列
通过复制和修改Tim的解决方案,您可以检查以下内容
;WITH cte AS (
SELECT *,
ROW_NUMBER() OVER (PARTITION BY customer, service_date ORDER BY create_timestamp) rn
FROM yourTable
)
DELETE
FROM cte
WHERE rn > 1;