[英]SQLITE 3 - Delete older than N instances per item
我有一个带有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语句来实现此目的。
您必须计算数据库中存在多少个相同操作的记录。 如果对于特定记录,有两个或更多个其他记录的时间戳较新,则应删除该记录:
DELETE FROM MyTable
WHERE (SELECT COUNT(*)
FROM MyTable AS Newer
WHERE Newer.OPERATION = MyTable.OPERATION AND
Newer.RUN > MyTable.RUN
) >= 2
请不要因为必须使用像yyyy-mm-dd
这样的日期格式,并且在开始时使用最重要的字段,以便进行日期比较。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.