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

MySQL查询按日期累计的历史Min/Max值求助

MySQL 计算截至当前日期的累计最值

假设你的表名为 insurance_data,字段分别是 Insurance、Date、Value,可以通过以下两种方式实现需求:

方法一:使用窗口函数(MySQL 8.0+ 支持)

窗口函数是最高效的实现方式,通过分区和排序定义计算范围:

SELECT
    Insurance,
    Date,
    MIN(Value) OVER (PARTITION BY Insurance ORDER BY Date) AS Cumulative_Min,
    MAX(Value) OVER (PARTITION BY Insurance ORDER BY Date) AS Cumulative_Max
FROM
    insurance_data
ORDER BY
    Insurance, Date;
  • PARTITION BY Insurance:按保险类型分组,保证每个保险的累计计算独立进行
  • ORDER BY Date:分组内按日期排序,窗口默认包含从分组起始到当前行的所有数据,从而得到截至当前日期的历史累计最值

方法二:关联子查询(兼容低版本MySQL)

如果你的MySQL版本低于8.0,不支持窗口函数,可以用子查询实现:

SELECT
    t1.Insurance,
    t1.Date,
    (SELECT MIN(t2.Value) FROM insurance_data t2 WHERE t2.Insurance = t1.Insurance AND t2.Date <= t1.Date) AS Cumulative_Min,
    (SELECT MAX(t2.Value) FROM insurance_data t2 WHERE t2.Insurance = t1.Insurance AND t2.Date <= t1.Date) AS Cumulative_Max
FROM
    insurance_data t1
ORDER BY
    t1.Insurance, t1.Date;

该方法通过子查询对每一行数据,筛选同保险且日期不晚于当前行的记录,计算其中的最值,实现累计效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 00:37:25