Роллинг записей базы данных по некоторым критериям - PullRequest
1 голос
/ 21 мая 2010

У меня есть база данных, в которой разрешено до n записей. Периодически его необходимо обрезать до самых последних записей m .

Таблица (назовите ее mytable) имеет отметку даты и времени runstamp

Моя общая мысль заключалась в том, чтобы выполнить запрос, подобный этому

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

Но оказывается, что макс берется до применения лимита, и я не знаю, как выполнить работу сейчас.

Детали реализации, которые могут не иметь значения: это делается в sqlite.

Ответы [ 2 ]

0 голосов
/ 24 мая 2010

Запрос в формате Perl, который решил мою проблему, как-то по ссылке blissapp.

   my $truncate_query = "DELETE FROM mytable WHERE runstamp < " .
       "(SELECT MIN(runstamp) FROM " .
       "(SELECT * FROM mytable ORDER BY runstamp DESC LIMIT $max_records))";
0 голосов
/ 21 мая 2010

Боюсь, что то, что вы пробовали, не может сработать.

Предполагается, что дополнительный выбор должен возвращать только 1 строку: это минимальная отметка выполнения в таблице. Отсюда следует, что ни одна строка в mytable не имеет метку выполнения ниже, поэтому ничего не удаляется.

Возможно, вы хотите что-то вроде:

(select max(runstamp) from 
   (select runstamp from mytable order by runstamp limit m)) 
...