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
相关产品推荐
相关产品推荐

