Хранить только N последних записей в базе данных SQLite, отсортированных по дате - PullRequest
14 голосов
/ 30 июня 2011

У меня есть база данных SQLite, для которой мне нужно сделать следующее: Сохранять только последние N записей, отсортированных по дате. Как ты это делаешь?

Ответы [ 4 ]

38 голосов
/ 30 июня 2011

Удалить все, кроме последних 10 записей.

delete
from test
where id not in (
    select id
    from test
    order by date desc
    limit 10
)
2 голосов
/ 04 марта 2013

, чтобы сохранить только последние 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) );

Дайте мне знать, как это сработало для вас!

2 голосов
/ 09 декабря 2012

В соответствии с документацией SQLite :

Если SQLite скомпилирован с опцией времени компиляции SQLITE_ENABLE_UPDATE_DELETE_LIMIT, то синтаксис оператора DELETE расширяется добавлением необязательногоПредложения ORDER BY и LIMIT.

(...)

Если в предложении DELETE есть предложение ORDER BY, то все строки, которые будут удалены в отсутствие предложения LIMIT, сортируются в соответствии сЗАКАЗАТЬ ПО.Первые M строк, где M - это значение, найденное путем вычисления выражения предложения OFFSET, пропускаются, а следующие N, где N - значение выражения LIMIT, удаляются.Если после принятия предложения OFFSET осталось меньше N строк или если предложение LIMIT имеет отрицательное значение, все остальные строки будут удалены.

Это позволит вам написать:

DELETE FROM table WHERE expr ORDER BY date DESC LIMIT -1 OFFSET 10
0 голосов
/ 21 мая 2014

Если у вас есть столбец 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 на столбец отметки времени)

...