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

Moving average in MYSQL without dates but grouped by another column

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

日期 销售代表 促销
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 分组。所以像这样:

日期 销售代表 促销 平均移动
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 用作 window 函数,并为此添加 frame 子句:

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

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

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