千家信息网

mysql中滑动聚合的示例分析

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要为大家展示了"mysql中滑动聚合的示例分析",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"mysql中滑动聚合的示例分析"这篇文章吧。滑动聚合
千家信息网最后更新 2026年11月01日mysql中滑动聚合的示例分析

这篇文章主要为大家展示了"mysql中滑动聚合的示例分析",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"mysql中滑动聚合的示例分析"这篇文章吧。

滑动聚合是按顺序对滑动窗口范围内的数据进行聚合的操作。下累积聚合不同,滑动聚合并不是统计开始计算的位置到当前位置的数据。

这里以统计最近三个月中员工第月订单情况为例来介绍滑动聚合。

滑动聚合和累积聚合解决方案的主要区别在于连接的条件不同。滑动聚合条件不再是b.ordermonth <= a.ordermonth,而应该是b.ordermonth大于前三个月的月份,并且小于当前月份。因此滑动聚合的解决方案的SQL语句如下

SELECT a.empid, DATE_FORMAT(a.ordermonth, '%Y-%m') AS ordermonth, a.qty AS thismonth, SUM(b.qty) AS total, CAST(AVG(b.qty) AS DECIMAL(5,2)) AS avgFROM emporders aINNER JOIN emporders b ON a.empid=b.empid AND b.ordermonth > DATE_ADD(a.ordermonth, INTERVAL -3 MONTH) AND b.ordermonth <= a.ordermonthWHERE DATE_FORMAT(a.ordermonth,'%Y')='2015' AND DATE_FORMAT(b.ordermonth,'%Y')='2015'GROUP BY a.empid,DATE_FORMAT(a.ordermonth, '%Y-%m'),a.qtyORDER BY a.empid,a.ordermonth

运行结果如下

该解决方案返回的是三个月为一个周期的滑动聚合,但是每个用户包含前两个月并且未满3个月的聚合。如果只希望返回满3个月的聚合,不返回未满3个月的聚合,可以使用HAVING过滤器进行过滤,过滤的条件为MIN(b.ordermonth)=DATE_ADD(a.ordermonth, INTERVAL -2 MONTH),例如

SELECT a.empid, a.ordermonth AS ordermonth, a.qty AS thismonth, SUM(b.qty) AS total, CAST(AVG(b.qty) AS DECIMAL(5,2)) AS avgFROM emporders aINNER JOIN emporders b ON a.empid=b.empid AND b.ordermonth > DATE_ADD(a.ordermonth, INTERVAL -3 MONTH) AND b.ordermonth <= a.ordermonthWHERE DATE_FORMAT(a.ordermonth,'%Y')='2015' AND DATE_FORMAT(b.ordermonth,'%Y')='2015' AND a.empid=1GROUP BY a.empid,DATE_FORMAT(a.ordermonth, '%Y-%m'),a.qtyHAVING MIN(b.ordermonth)=DATE_ADD(a.ordermonth, INTERVAL-2 MONTH)ORDER BY a.empid,a.ordermonth

运行结果如下

年初至今聚合和滑动聚合类似,不同的地方仅在于统计的仅为当前一年的聚合。唯一的区别体现在下限的开始位置上。在年初至今的问题中,下限为该年的第一天,而滑动聚合的下限为N个月的第一天。因此,年初至今的问题的解决方案如下图所示,得到的结果

SELECT a.empid, DATE_FORMAT(a.ordermonth, '%Y-%m') AS ordermonth, a.qty AS thismonth, SUM(b.qty) AS total, CAST(AVG(b.qty) AS DECIMAL(5,2)) AS avgFROM emporders aINNER JOIN emporders b  ON a.empid=b.empid  AND b.ordermonth >= DATE_FORMAT(a.ordermonth, '%Y-01-01')  AND b.ordermonth <= a.ordermonth  AND DATE_FORMAT(b.ordermonth,'%Y')='2015'GROUP BY a.empid,a.ordermonth,a.qtyORDER BY a.empid,a.ordermonth

运行结果如下

以上是"mysql中滑动聚合的示例分析"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

方案 结果 解决方案 示例 分析 不同 三个 下限 位置 内容 条件 篇文章 统计 运行 数据 月份 问题 学习 帮助 两个 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 百单网互联网科技有限公司怎么样 南京欣网互联网络科技有限公司 港股互联网科技股 世界互联网领先科技成果 深圳齐家互联网科技 重庆科技学院互联网 互联网金融监管科技 互联网汽车科技小镇 欧洲十大科技互联网公司 互联网为啥属于高科技 厦门千工互联网科技有限公司 互联网科技产业特征 互联网科技大奖都有哪些公司 乌鲁木齐新华智原互联网科技学校 科技赋能视角下互联网保险发展 深圳互联网科技的发展 互联网领先科技宣传片 神州科技互联网有限公司 悟空问答互联网科技 科技互联网公司两年变化 互联网是第几次科技革命的成果 互联网科技卖菜 互联网科技英文 广州互联网络科技有限公司 居家互联网科技有限公司 互联网在线教育科技创业 沐思想互联网科技有限公司 锡山区互联网智能科技产品供应 黑云互联网科技有限公司 35岁以上互联网科技行业
0