微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MYSQL中没有日期但按另一列分组的移动平均值

如何解决MYSQL中没有日期但按另一列分组的移动平均值

我在 MysqL(版本 5.7.33)中有一个表,如下所示:

日期 销售代表 销售
2021-04-01 杰克 10
2021-04-02 杰克 8
2021-03-01 丽莎 10
2021-03-02 丽莎 14
2021-03-03 丽莎 21
2021-03-04 丽莎 7
2021-03-08 丽莎 10
2021-03-09 丽莎 20
2021-03-10 丽莎 15

我想要 Sale 列的移动平均值,但不希望它基于日期,因为日期有差距,而是我想要它基于行号并按 SalesRep 分组。所以是这样的:

日期 销售代表 销售 MoveAvg
2021-04-01 杰克 10 10
2021-04-02 杰克 8 9
2021-03-01 丽莎 10 10
2021-03-02 丽莎 14 12
2021-03-03 丽莎 21 15
2021-03-04 丽莎 7 13
2021-03-08 丽莎 10 12.4
2021-03-09 丽莎 20 13.6
2021-03-10 丽莎 15 13.8

因此,移动平均线是针对特定销售代表从开始到结束的所有日期,然后对另一个销售代表重新开始,依此类推。这可以在 MysqL 中做到吗?提前致谢!

解决方法

您可以将 avg 用作带有框架子句的窗口函数:

SELECT dt,salesrep,sale,AVG(sale) OVER (PARTITION BY salesrep ORDER BY dt
                    ROWS UNBOUNDED PRECEDING)
       AS moveavg

如果没有窗口函数,您只需连接每个销售代表的所有前一行:

select a.dt,a.salesrep,a.sale,avg(b.sale) as moveavg
from mysterytablename a
join mysterytablename b on b.salesrep=a.salesrep and b.dt <= a.dt
group by a.salesrep,a.dt

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。