SQLite:删除总大小的最旧行

时间:2013-10-20 07:09:49

标签: sql sqlite

我在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的最旧版本。我想删除最旧的行r1r2,等等sum(size(r1) + size(r2) + ...) > N

2 个答案:

答案 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