我在SQLite DB中有一种存储空间。我的专栏是:
TABLE blobs
id INTEGER PRIMARY KEY AUTOINCREMENT
timestamp TIMESTAMP -- Indexed
data BLOB
size INTEGER -- Size of 'data' BLOB, bytes
我想删除最旧的行,使其总大小大于或等于N
个字节。我怎样才能做到这一点?什么SQL语句?请注意我在答案中对SQL不熟悉。
修改
感谢您的回答,但我不需要找到大于N
的最旧版本。我想删除最旧的行r1
,r2
,等等sum(size(r1) + size(r2) + ...) > N
。
答案 0 :(得分:3)
此查询将执行:
DELETE FROM blobs
WHERE ROWID IN (
SELECT ROWID FROM blobs
WHERE (SELECT SUM(size) FROM blobs AS _ WHERE timestamp<=blobs.timestamp) <= N
);
请务必将N
替换为实际数字。
使用SELECT *
代替DELETE
来检查要删除的记录。
答案 1 :(得分:0)
试试这个
delete from blobs
where size >= N
and timestamp = (select MIN(timestamp) from blobs);
以下是SQLFiddle