1

我有一个包含 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 语句来实现此目的。

4

1 回答 1

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在开头使用最重要字段的日期格式,以便日期比较起作用。

于 2012-11-26T12:19:04.130 回答