【发布时间】:2015-10-04 06:41:29
【问题描述】:
如果两个重复记录之间的CreatedDate(another column) 差异小于 30 天,我想从表中删除重复记录(在 fkInvoiceId 和 fkcontractid 的基础上重复)。
WITH cte AS
(
SELECT
Id,
fkcontractid,
fkInvoiceId,
CreatedDate,
row_number() OVER(PARTITION BY fkcontractid, fkInvoiceId ORDER BY fkcontractid) AS [rn]
from mytable left join Invoice on Invoice.pkinvoiceid = mytable.fkinvoiceid
)
delete tt from mytable tt inner join CTE as x on x.Id = tt.Id
WHERE x.[rn] > 1;
上面的查询正在删除重复的记录(fkInvoiceId 和 fkcontractid),但它没有考虑到 Date(createdDate) 的差异。
【问题讨论】:
-
您使用的是哪个 DBMS?
-
假设您有 3 个副本,每个副本相隔 28 天。应该删除哪些,为什么?
-
如果我有三个重复的,那么我想保留最新的一个。其余的记录应该删除。
标签: sql common-table-expression duplicate-removal