MySQL-当总和小于x时选择

MySQL-当总和小于x时选择,mysql,Mysql,我有一个数据库中引用的缓存文件列表,希望清除大小限制(比如20000000)之外的最旧文件 表简单地如下所示: [ hash | filesize | timestamp ] 目前正在运行以下命令 SELECT `hash`, `filesize` FROM `cachetable` ORDER BY `timestamp` DESC; 然后从外部处理结果。有没有办法只获取一个超出20000000限制的结果列表?我会使用表上的,和SUM函数来查看它何时超过阈值大小,比如大小(在您的情况下为2

我有一个数据库中引用的缓存文件列表,希望清除大小限制(比如20000000)之外的最旧文件

表简单地如下所示:

[ hash | filesize | timestamp ]
目前正在运行以下命令

SELECT `hash`, `filesize` FROM `cachetable` ORDER BY `timestamp` DESC;
然后从外部处理结果。有没有办法只获取一个超出20000000限制的结果列表?

我会使用表上的,和
SUM
函数来查看它何时超过阈值大小,比如大小(在您的情况下为20000000)

  • 找出表中50%最新行的大小
  • 如果小于大小,则查询前75%的行;如果大于大小,则查询前25%的行
  • 通过每次将行集分成两部分重复此操作
  • 通过这种方式,您将能够在日志(N)查询中获得目标阈值,其中N是表中的行总数。 获取目标阈值(如阈值)后,删除该阈值之后的所有行:

    SELECT `hash`, `filesize` 
    FROM `cachetable` 
    ORDER BY `timestamp` DESC 
    LIMIT  NUMBER_ROWS_TO_DELETE /* any large number to delete all after THRESHOLD */ 
    OFFSET THRESHOLD;
    
    我会用偏移量

    SELECT `hash`, `filesize` 
    FROM `cachetable` 
    ORDER BY `timestamp` DESC 
    LIMIT <your_limit_here> 
    OFFSET 20000000;
    
    选择“散列”、“文件大小”
    从'cachetable'开始
    按`时间戳`描述订购
    极限
    抵销20000000;
    

    请务必用您自己可接受的数字替换您的限制。

    嘿,干杯,问题是虽然每个文件的大小不同,但我不想保留20000000个文件,而是要保留多少个文件,总大小是多少?如果总和(文件大小)<20000,您只想保留X个文件?