You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL如何查询累计值超过指定阈值的较早记录用于删除

MySQL查询语句实现方案

我们先假设你的表名为file_records,可替换为你实际使用的表名。


版本1:MySQL 8.0+(支持窗口函数,推荐写法)

用窗口函数实现倒序累计求和,写法简洁易读:

SELECT Id, FileSizeMB, cumulative_size
FROM (
    SELECT 
        Id,
        FileSizeMB,
        SUM(FileSizeMB) OVER (ORDER BY Id DESC) AS cumulative_size
    FROM file_records
) t
WHERE cumulative_size >= 500;

如果需要直接执行删除操作,可以用以下语句:

DELETE FROM file_records
WHERE Id IN (
    SELECT Id FROM (
        SELECT 
            Id,
            SUM(FileSizeMB) OVER (ORDER BY Id DESC) AS cumulative_size
        FROM file_records
    ) t
    WHERE cumulative_size >= 500
);

版本2:MySQL 5.x(不支持窗口函数,用用户变量实现)

如果你的MySQL版本较低不支持窗口函数,可以用自定义变量计算累计值:

SELECT Id, FileSizeMB, cumulative_size
FROM (
    SELECT 
        Id,
        FileSizeMB,
        @cumulative := @cumulative + FileSizeMB AS cumulative_size
    FROM file_records
    ORDER BY Id DESC
) t, (SELECT @cumulative := 0) init
WHERE cumulative_size >= 500;

对应删除语句如下:

DELETE FROM file_records
WHERE Id IN (
    SELECT Id FROM (
        SELECT 
            Id,
            @cumulative := @cumulative + FileSizeMB AS cumulative_size
        FROM file_records
        ORDER BY Id DESC
    ) t, (SELECT @cumulative := 0) init
    WHERE cumulative_size >= 500
);

*注意:执行删除操作前,请先运行对应的查询语句校验返回结果是否符合预期,避免误删数据。

内容的提问来源于stack exchange,提问作者arneetsingh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 21:24:03