在SQLite数据库中只保留N条最后记录,按日期排序
我有一个SQLite数据库,我需要执行以下操作:只保留最后N条记录,按日期排序。怎么做?删除除最近10条记录外的所有记录在SQLite数据库中只保留N条最后记录,按日期排序,sql,sqlite,sql-delete,Sql,Sqlite,Sql Delete,我有一个SQLite数据库,我需要执行以下操作:只保留最后N条记录,按日期排序。怎么做?删除除最近10条记录外的所有记录 delete from test where id not in ( select id from test order by date desc limit 10 ) 根据报告: 如果使用SQLite\u ENABLE\u UPDATE\u DELETE\u LIMIT编译时选项编译SQLite,则通过添加可选的ORDER by和LIMIT
delete
from test
where id not in (
select id
from test
order by date desc
limit 10
)
根据报告:
如果使用SQLite\u ENABLE\u UPDATE\u DELETE\u LIMIT编译时选项编译SQLite,则通过添加可选的ORDER by和LIMIT子句来扩展DELETE语句的语法
如果DELETE语句有ORDERBY子句,则在没有LIMIT子句的情况下将删除的所有行都将根据ORDERBY进行排序。跳过前M行,其中M是通过计算OFFSET子句表达式找到的值,删除以下N行,其中N是LIMIT表达式的值。如果在考虑OFFSET子句后,剩余的行数少于N行,或者如果LIMIT子句的计算结果为负值,则删除所有剩余行
这将允许您编写:
DELETE FROM table WHERE expr ORDER BY date DESC LIMIT -1 OFFSET 10
要只保留最后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) );
让我知道它是如何为你工作的 假设您有一个id列,它是一个自动递增的序列号,您可以使用以下命令:
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替换为时间戳列需要这些列,如果有,则自动递增…重复:谢谢。但是我怎么知道我需要删除多少条记录呢?你不知道,这个查询只删除了最近的10条记录。谢谢,它成功了。虽然您的sql语句不需要*不是吗…order by date desc limit 10?我尝试了这个精确的查询剪切粘贴,但返回了一个错误。然后,我尝试按照@Drejc的建议,将desc放在order by date之后,如果剩余的行数少于N行,它就起作用了。这里-1是什么意思?@IgorGanapolsky看引用段落的最后一句话:如果LIMIT子句的值为负值,则删除所有剩余的行。因此,如果表中总共少于10行,则所有行都将被删除?@IgorGanapolsky如果表中总共少于10行,那么它们都不会被删除。@VladimirCh可能是因为这个问题是针对SQLite的,而不是针对mariaDB的。