0

我在 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

4

2 回答 2

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检查要删除的记录。

于 2013-10-21T09:01:20.903 回答
0

尝试这个

delete from blobs
where size >= N 
and timestamp = (select MIN(timestamp) from blobs);

这是SQLFiddle

于 2013-10-20T07:29:41.840 回答