我有一个包含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语句来实现这一点。
答案 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
的日期格式,并在开头使用最重要的字段,以便日期比较有效。