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