在MySQL中使用窗口函数移动平均

我的数据集如下:

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 Community Server-GPL

回答:

您可以将Window

Functions与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;

回答:

  • 2 PRECEDING表示当前行上方的两行(当前行除外)。我们在上明确定义了升序Date。因此,这意味着两个最接近的日期,低于当前行的日期
  • CURRENT ROW 表示当前行。
  • BETWEEN 使我们能够考虑定义范围内的行(包括边界条件)。
  • 因为,你要移动平均线是null对前两排,我们可以检查此使用Row_number()功能Case .. When

以上是 在MySQL中使用窗口函数移动平均 的全部内容, 来源链接: utcz.com/qa/406865.html

回到顶部