我有一个SQLite数据库,我需要执行以下操作:仅保留最后N条记录,按日期排序。你是怎么做到的?
答案 0 :(得分:37)
删除除最新10条记录以外的所有记录。
delete
from test
where id not in (
select id
from test
order by date desc
limit 10
)
答案 1 :(得分:2)
如果使用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
替换为您的时间戳列)