繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM