我有一个数据库,最多允许一些 n 条目。需要定期将其修剪为最新的 m 条目。
表格(称之为mytable
)有一个日期时间戳runstamp
我的一般想法是运行像这样的查询
delete from mytable where runstamp <
(select min(runstamp) from mytable order by runstamp limit m)
但事实证明,最大值是在施加限制之前采取的,我不知道如何完成工作。
可能无关紧要的实现细节:这是在sqlite中完成的。
答案 0 :(得分:0)
我担心你所尝试的东西不可能奏效。
子选择应该只返回1行:这是表中的最小runstamp。接下来,mytable中的任何行都没有较低的runstamp,因此不会删除任何内容。
也许你想要这样的东西:
(select max(runstamp) from
(select runstamp from mytable order by runstamp limit m))
答案 1 :(得分:0)
一个perl格式的查询解决了我的问题,基于blissapp的链接进行排序。
my $truncate_query = "DELETE FROM mytable WHERE runstamp < " .
"(SELECT MIN(runstamp) FROM " .
"(SELECT * FROM mytable ORDER BY runstamp DESC LIMIT $max_records))";