按某些条件滚动数据库条目

时间:2010-05-20 22:31:06

标签: sql logging

我有一个数据库,最多允许一些 n 条目。需要定期将其修剪为最新的 m 条目。

表格(称之为mytable)有一个日期时间戳runstamp

我的一般想法是运行像这样的查询

delete from mytable where runstamp <
   (select min(runstamp) from mytable order by runstamp limit m)

但事实证明,最大值是在施加限制之前采取的,我不知道如何完成工作。

可能无关紧要的实现细节:这是在sqlite中完成的。

2 个答案:

答案 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))";