Подтвердить что ты не робот

Сохранять только N последних записей в базе данных SQLite, отсортированных по дате

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

4b9b3361

Ответ 1

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

delete
from test
where id not in (
    select id
    from test
    order by date desc
    limit 10
)

Ответ 2

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

Сообщите мне, как это сработало для вас!

Ответ 3

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

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

(...)

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

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

DELETE FROM table WHERE expr ORDER BY date DESC LIMIT -1 OFFSET 10

Ответ 4

Предполагая, что у вас есть столбец 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 на столбец временной отметки)