Удалить самые старые записи из базы данных - PullRequest
19 голосов
/ 08 сентября 2010

У меня есть база данных с 1000 записей.Я пытаюсь создать оператор SQL, поэтому, если число записей превышает 1000, удаляются самые старые записи (т. Е. Новые записи выше 1000 «заменяют» самые старые записи).Я использую SQLite, но я предполагаю, что обычный синтаксис SQL здесь подойдет.

Ответы [ 3 ]

44 голосов
/ 08 сентября 2010

Если вы используете поле автоинкремента, вы можете легко написать это, чтобы удалить самые старые 100 записей:

DELETE FROM mytable WHERE id IN (SELECT id FROM mytable ORDER BY id ASC LIMIT 100)

Или, если такого поля нет, используйте ROWID:

DELETE FROM mytable WHERE ROWID IN (SELECT ROWID FROM mytable ORDER BY ROWID ASC LIMIT 100)

Или, чтобы оставить только последние 1000 записей:

DELETE FROM mytable WHERE ROWID IN (SELECT ROWID FROM mytable ORDER BY ROWID DESC LIMIT -1 OFFSET 1000)
1 голос
/ 08 сентября 2010

Предполагая, что ваша таблица имеет первичный ключ и столбец с отметкой времени, указывающей, когда была вставлена ​​запись), вы можете использовать запрос по строкам

delete from tableToDeleteFrom
where tablePK in 
(select tablePK 
from tableToDeleteFrom
where someThresholdDate <= @someThresholdDate)
0 голосов
/ 08 ноября 2013

Для удаления всех записей, кроме первой записи (минимальный / максимальный идентификатор), вы можете использовать:

SET @ls AS INT

SELECT @ls = MIN(id) FROM DATA

DELETE FROM DATA WHERE id <> @ls
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...