У меня есть база данных SQLite, мне нужно сделать следующее: Хранить только последние N записей, отсортированных по дате. Как вы это делаете?
Сохранять только N последних записей в базе данных SQLite, отсортированных по дате
Ответ 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
на столбец временной отметки)