我必须删除超过N天的每个帐户+ date_added组合的数据。 在N天之前,这意味着删除上述组合的前N个不同出现次数
DELETE
FROM tbl_check
WHERE
N < (SELECT count(DISTINCT date_added) + 1
FROM tbl_check b
WHERE b.ACCOUNT_NUMBER = tbl_check.ACCOUNT_NUMBER
AND tbl_check.date_added < b.date_added)
此查询必须在Sybase ASE和Oracle上运行。我已经写了上面的查询,它试图模拟DENSE_RANK并基于排名成功删除。
然而,它不使用任何索引,也是执行FTS的相关查询。此表中可能有数千行。
有一个复合PK,它是:FOREIGN_KEY_COL,ACCOUNT_NUMBER,date_added,.. 这个查询是否适用于该作业,或者我们可以对其进行改进,因为相同的查询必须对所提到的两个数据库都有效。
答案 0 :(得分:0)
为什么不使用以下查询;
DELETE FROM tbl_check where (getdate()-date_added)> N