Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQLite:删除总大小为的最旧行_Sql_Sqlite - Fatal编程技术网

SQLite:删除总大小为的最旧行

SQLite:删除总大小为的最旧行,sql,sqlite,Sql,Sqlite,我在SQLite数据库中有一种存储。我的专栏是: TABLE blobs id INTEGER PRIMARY KEY AUTOINCREMENT timestamp TIMESTAMP -- Indexed data BLOB size INTEGER -- Size of 'data' BLOB, bytes 我想删除最旧的行,使它们的总大小大于或等于N字节。我该怎么做?什么SQL语句?请注意,在您的回答中,我是SQL新手 编辑: 感谢您的回答,但我不需要找到大于N的最

我在SQLite数据库中有一种存储。我的专栏是:

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等,以便sumsizer1+sizer2+…>N.

试试这个

delete from blobs
where size >= N 
and timestamp = (select MIN(timestamp) from blobs);
这是你的建议试试这个

delete from blobs
where size >= N 
and timestamp = (select MIN(timestamp) from blobs);
这是你的建议试试这个

delete from blobs
where size >= N 
and timestamp = (select MIN(timestamp) from blobs);
这是你的建议试试这个

delete from blobs
where size >= N 
and timestamp = (select MIN(timestamp) from blobs);
以下是此查询将执行的操作:

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

此查询将执行以下操作:

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

此查询将执行以下操作:

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

此查询将执行以下操作:

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

IMHO它不正确,因为它说:查找最旧的行,如果其大小大于N->删除它,否则什么都不要做。不是最旧的行,而是行,这些行的总和>=N.IMHO它不正确,因为它说:查找最旧的行,如果其大小大于N->删除它,否则不做任何事情。不是最旧的行,而是行,这些行的总和>=N.IMHO不正确,因为它说:查找最旧的行,如果其大小大于N->删除它,否则不做任何事情。不是最旧的行,而是行,这些行的总和>=N.IMHO不正确,因为它说:找到最旧的行,如果它的大小大于N->删除它,否则什么都不要做。不是最旧的行,而是行,这些行的总和>=N。谢谢!这很好用,但是你能解释一下在SELECT SUMsize FROM blobs中的时间戳是如何工作的吗?在哪里时间戳是的,它工作得很好,我被作为新手的符号弄糊涂了。我必须在没有足够时间热身的情况下做点什么。谢谢!这很好用,但是你能解释一下在SELECT SUMsize FROM blobs中的时间戳是如何工作的吗?在哪里时间戳是的,它工作得很好,我被作为新手的符号弄糊涂了。我必须在没有足够时间热身的情况下做点什么。谢谢!这很好用,但是你能解释一下在SELECT SUMsize FROM blobs中的时间戳是如何工作的吗?在哪里时间戳是的,它工作得很好,我被作为新手的符号弄糊涂了。我必须在没有足够时间热身的情况下做点什么。谢谢!这很好用,但是你能解释一下在SELECT SUMsize FROM blobs中的时间戳是如何工作的吗?在哪里时间戳是的,它工作得很好,我被作为新手的符号弄糊涂了。我必须在没有足够时间热身的情况下做点什么。