在SQLite数据库中仅保留N个最后记录,按日期排序

时间:2011-06-29 22:42:41

标签: sql sqlite sql-delete

我有一个SQLite数据库,我需要执行以下操作:仅保留最后N条记录,按日期排序。你是怎么做到的?

4 个答案:

答案 0 :(得分:37)

删除除最新10条记录以外的所有记录。

delete
from test
where id not in (
    select id
    from test
    order by date desc
    limit 10
)

答案 1 :(得分:2)

根据SQLite documentation

  

如果使用SQLITE_ENABLE_UPDATE_DELETE_LIMIT编译时选项编译SQLite,则通过添加可选的ORDER BY和LIMIT子句来扩展DELETE语句的语法。

     

(...)

     

如果DELETE语句具有ORDER BY子句,则在没有LIMIT子句的情况下将删除的所有行都将根据ORDER BY进行排序。将跳过前M行,其中M是通过评估OFFSET子句表达式找到的值,并删除后面的N,其中N是LIMIT表达式的值。如果在考虑OFFSET子句后剩余少于N行,或者如果LIMIT子句评估为负值,则删除所有剩余行。

这将允许你写:

DELETE FROM table WHERE expr ORDER BY date DESC LIMIT -1 OFFSET 10

答案 2 :(得分:2)

只保留最后10条记录,反思。

删除旧的10条记录:

DELETE FROM Table_name 
WHERE date in (SELECT date FROM Table_name ORDER BY Date Desc Limit -1 
               OFFSET  (select count(*)-10 from Table_name) );

让我知道它对你有用!

答案 3 :(得分:0)

假设您的id列是序号(AUTO INCREMENT),您可以使用以下内容:

DELETE FROM table_name
WHERE id < (
    SELECT MIN(id)
    FROM (SELECT id
          FROM table_name
          ORDER BY id DESC
          LIMIT num_of_records_to_keep))

使用时间戳列时可以使用相同的查询(只需将id替换为您的时间戳列)