从数据库中删除最旧的记录

时间:2010-09-08 11:13:07

标签: sql sqlite

我有一个包含1000条记录的数据库。 我正在尝试创建一个SQL语句,因此如果记录数增长到1000以上,则删除最旧的记录(即1000以上的新记录'替换'最旧的记录)。 我正在使用SQLite,但我认为通常的SQL语法适合这里。

3 个答案:

答案 0 :(得分:44)

如果使用自动增量字段,则可以轻松编写此字段以删除最早的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 :(得分:1)

假设您的表具有主键和带有时间戳的列,该列指示何时插入记录),您可以使用

行的查询。
delete from tableToDeleteFrom
where tablePK in 
(select tablePK 
from tableToDeleteFrom
where someThresholdDate <= @someThresholdDate)

答案 2 :(得分:-4)

要删除除第一条记录(最小/最大ID)以外的所有记录,您可以使用:

SET @ls AS INT

SELECT @ls = MIN(id) FROM DATA

DELETE FROM DATA WHERE id <> @ls