如何获取数据库近20年每4天周期的数值总和最大值?求新SQL查询
获取过去20年每4天周期数值总和最大值的有效SQL
原提供的查询仅实现了单日分组并筛选单日记录数≥4的情况,并未达成每4天周期数值总和的计算目标。以下是符合需求的替代查询(基于PostgreSQL语法):
WITH daily_agg AS ( -- 先按天聚合每日数值总和 SELECT DATE_TRUNC('day', date) AS day_date, SUM(value) AS daily_total FROM your_table WHERE date >= NOW() - INTERVAL '20 years' GROUP BY DATE_TRUNC('day', date) ), four_day_sums AS ( -- 计算连续4天的滚动总和 SELECT day_date AS window_start, day_date + INTERVAL '3 days' AS window_end, SUM(daily_total) OVER ( ORDER BY day_date ROWS BETWEEN CURRENT ROW AND 3 FOLLOWING ) AS four_day_total FROM daily_agg ) -- 筛选出完整4天周期的最大值 SELECT window_start, window_end, four_day_total FROM four_day_sums WHERE four_day_total IS NOT NULL ORDER BY four_day_total DESC LIMIT 1;
逻辑说明:
- daily_agg CTE:先将原始数据按天聚合,得到每天的数值总和,确保数据粒度统一为单日。
- four_day_sums CTE:使用窗口函数
SUM() OVER(),按日期排序后计算当前日期及后续3天的总和,生成连续4天的周期总和。 - 最终查询:过滤掉最后几天不足4天的不完整周期,按4天总和降序排列后取第一行,即为过去20年中每4天周期数值总和的最大值。
内容的提问来源于stack exchange,提问作者Amani
相关产品推荐
相关产品推荐

