从数据库中删除除Oracle中前两个拖行外的所有行

Moh*_*ari 5 sql oracle

您好,我在删除行时遇到问题,我想在数据库中保留两行并删除所有其他行,但我在此链接中找到了关于删除行的查询,但这 提供了mysql语法限制功能。但是在oracle中没有可用的限制变量。我该怎么做?

DELETE FROM Table
  WHERE DateColumn NOT IN (SELECT DateColumn 
                             FROM Table 
                         GROUP BY date(DateColumn) 
                         ORDER BY DateColumn DESC
                            LIMIT 2);
Run Code Online (Sandbox Code Playgroud)

San*_*San 5

这可以通过这个查询来实现

DELETE FROM TABLE 
 WHERE ROWID NOT IN
    (SELECT ROWIDS FROM (SELECT MIN(ROWID) ROWIDS 
                           FROM TABLE 
                          GROUP BY DATECOLUMN
                          ORDER BY DATECOLUMN DESC)
      WHERE ROWNUM <= 2);
Run Code Online (Sandbox Code Playgroud)

最里面的查询将从表中返回 rowid 的最小值,然后直接的外部查询将仅选择要在最外面的删除中避免的两行。