SQLITE 3 - 删除每个项目的N个实例

时间:2012-11-26 11:23:57

标签: sql sqlite

我有一个包含RUN_TIME和OPERATION_NAME列的表格。我想通过删除每个操作的N个实例来修剪表。例如:如果输入表是

RUN                 OPERATION
13/11/2012 05:39    GAM010P0
14/11/2012 05:39    GAM010P0
15/11/2012 05:39    GAM010P0
13/11/2012 05:09    GAM020P0
14/11/2012 05:09    GAM020P0
15/11/2012 05:09    GAM020P0
16/11/2012 05:09    GAM020P0
01/11/2012 17:09    GAM060P0

我想维护每个操作的2个最新实例,输出将是:

RUN                 OPERATION
14/11/2012 05:39    GAM010P0
15/11/2012 05:39    GAM010P0
15/11/2012 05:09    GAM020P0
16/11/2012 05:09    GAM020P0
01/11/2012 17:09    GAM060P0

通常我会使用RANK分析函数按照RUN_TIME和OPERATION_NAME分组进行排名;但是因为这个表存在于sqlite DB上,所以我无法编写删除SQL语句来实现这一点。

1 个答案:

答案 0 :(得分:1)

您必须计算数据库中存在相同操作的记录数。 如果对于特定记录,有两个或更多其他记录的时间戳更新,则应删除此记录:

DELETE FROM MyTable
WHERE (SELECT COUNT(*)
       FROM MyTable AS Newer
       WHERE Newer.OPERATION = MyTable.OPERATION AND
             Newer.RUN > MyTable.RUN
      ) >= 2

请注意,您必须使用类似yyyy-mm-dd的日期格式,并在开头使用最重要的字段,以便日期比较有效。