我的SQL也不错,但iOS上的SQLite不断让我感到高兴。
我有一个表格,我希望将行数限制在500左右,所以当它达到550的触发点时,它将删除最早的50行。
随着时间的推移,id不会始终从1开始,用户可以删除行,因此id是非顺序的。
我有juliandate
字段(double
),但我不确定是否有用
DELETE FROM contents WHERE id > '0' ORDER BY id DESC LIMIT 0, 50
DELETE FROM contents ORDER BY id DESC LIMIT 0, 50
文档说没关系但是失败了。有什么想法吗?
答案 0 :(得分:5)
保留最新的500条记录:
delete
from table_name
where _id not
in (select _id
from table_name
order by
_id desc
limit 500)
答案 1 :(得分:2)
这些方面的东西,也许?
delete from contents where juliandate <= (
select max(juliandate) from (
select juliandate from contents order by juliandate limit 0, 50));
您可以使用id而不是juliandate或任何其他字段,每个插入值都会增加。
答案 2 :(得分:1)
DELETE FROM contents WHERE id IN (SELECT id FROM t ORDER BY id ASC LIMIT 50)
DESC
表示5,4,3,2,1
,用它来删除the freshest
条记录
ASC
表示1,2,3,4,5
,用它来删除the earliest
条记录。
以下是一个例子:
$ sqlite3 /tmp/del_rows.sqlite3
CREATE TABLE t (id INTEGER PRIMARY KEY, value TEXT);
INSERT INTO t (value) VALUES ('a');
INSERT INTO t (value) VALUES ('b');
INSERT INTO t (value) VALUES ('c');
INSERT INTO t (value) VALUES ('d');
INSERT INTO t (value) VALUES ('e');
INSERT INTO t (value) VALUES ('f');
SELECT * FROM t;
-- 1|a
-- 2|b
-- 3|c
-- 4|d
-- 5|e
-- 6|f
-- Deleting 2 top rows:
DELETE FROM t WHERE id IN (SELECT id FROM t ORDER BY id ASC LIMIT 2);
SELECT * FROM t;
-- 3|c
-- 4|d
-- 5|e
-- 6|f
-- And again:
DELETE FROM t WHERE id IN (SELECT id FROM t ORDER BY id ASC LIMIT 2);
SELECT * FROM t;
-- 5|e
-- 6|f
答案 3 :(得分:0)
试一试。这应该是你要找的东西:
DELETE FROM contents WHERE id IN
(SELECT id FROM contents ORDER BY id LIMIT 50 ASC);
另请阅读,类似的问题:Keep only N last records in SQLite database, sorted by date