gpt4 book ai didi

mysql - MySQL中使用窗口函数的移动平均线

转载 作者:行者123 更新时间:2023-11-29 15:39:33 25 4
gpt4 key购买 nike

我的数据集如下:

Date              Price     3 Day Moving Average
-------------------------------------------------
2018-08-01 10
2018-08-02 12
2018-08-03 11 11 (10+12+11)/3\n
2018-08-04 15 12.67 (12+11+15)/3
2018-08-05 13 13 (11+15+13)/3
2018-08-06 17 ...
2018-08-07 18 …
2018-08-08 20 ..

仅使用 MySQL 窗口函数可以实现这一点吗?

环境详细信息:

服务器版本:8.0.12 MySQL 社区服务器 - GPL

最佳答案

您可以使用Window Functions with Frames :

SELECT
Date,
Price,
CASE WHEN
ROW_NUMBER() OVER (ORDER BY DATE) >= 3 THEN
AVG(Price) OVER (ORDER BY Date
ROWS BETWEEN 2 PRECEDING AND
CURRENT ROW)
ELSE NULL
END AS avg
FROM yourTable
ORDER BY Date;

DB Fiddle Demo

详细信息:

  • 2 PRECEDING 表示当前行上方两行(不包括当前行)。我们明确定义了 Date 的升序。因此,这意味着两个最接近的日期,低于当前行的日期
  • CURRENT ROW 表示当前行。
  • BETWEEN 允许我们考虑定义范围内的行(包括边界条件)。
  • you want对于前两行,移动平均值为 null,我们可以使用 Case .. When 中的 Row_number() 函数来检查这一点。

关于mysql - MySQL中使用窗口函数的移动平均线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57825102/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com