我必须删除每个帐户+ date_added组合的数据,这些数据超过N天。 通过N天的时候,它意味着此处删去比第一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 .. 这是查询胜任工作,或者我们可以改进后,它给予相同的查询具有如提到的两个数据库工作。
也有一些方法,使这项删除那些缓存将是很好 – fortm 2014-09-11 14:25:37