SQL 请求中的语法错误“... OVER ... ORDER BY... BETWEEN...”(旧版本与新版本)

Syntax error in SQL request "... OVER ... ORDER BY... BETWEEN..." (older versus new version)

我正在尝试制作一个移动平均线,将行的值与我的 SQL table.

的“值”列中的前 9 个值进行平均

基本上,我有这样的东西:

dateEvent                values
2021-07-05 06:00:10       2.0
2021-07-05 14:00:10       3.0
2021-07-05 20:00:10       4.0
2021-07-06 06:00:10       3.0
2021-07-06 14:00:10       1.0
2021-07-06 20:00:10       5.0
2021-07-07 06:00:10       4.0
2021-07-07 14:00:10       2.0
2021-07-07 20:00:10       3.0
2021-07-08 06:00:10       3.0
2021-07-08 14:00:10       3.0
2021-07-08 20:00:10       6.0
2021-07-09 06:00:10       3.0
2021-07-09 14:00:10       3.0
2021-07-09 20:00:10       5.0
2021-07-10 06:00:10       2.0
2021-07-10 14:00:10       3.0
2021-07-10 20:00:10       1.0

我想:

dateEvent                values      averageValues    averagePerDay
2021-07-05 06:00:10       2.0           2.0
2021-07-05 14:00:10       3.0           2.5                2.50
2021-07-05 20:00:10       4.0           3.0
2021-07-06 06:00:10       3.0           3.0
2021-07-06 14:00:10       8.0           4.0                3.60
2021-07-06 20:00:10       4.0           4.0
2021-07-07 06:00:10       2.0           3.7
2021-07-07 14:00:10       2.0           3.5                3.54
2021-07-07 20:00:10       3.0           3.44
2021-07-08 06:00:10       3.0           3.4
2021-07-08 14:00:10       3.0           3.5                3.57
2021-07-08 20:00:10       6.0           3.8
2021-07-09 06:00:10       3.0           3.7
2021-07-09 14:00:10       3.0           3.7                3.60
2021-07-09 20:00:10       5.0           3.4
2021-07-10 06:00:10       2.0           3.2
2021-07-10 14:00:10       3.0           3.3                3.23
2021-07-10 20:00:10       1.0           3.2

我在本地服务器(最新版本)上使用没有问题:

SELECT *,
    (CASE WHEN COUNT(*)
    OVER(ORDER BY dateEvent ROWS BETWEEN 10 PRECEDING AND 0 FOLLOWING) > 10
        THEN AVG(values)
        OVER(ORDER BY ID ROWS BETWEEN 10 PRECEDING AND 0 FOLLOWING)
        ELSE values
        END)
        AS 'averageValues' FROM f16
        group by CAST(dateEvent AS DATE)

但是,在我的旧服务器上(我没有更新它的权限),它在第 3 行围绕“OVER(ORDER BY ...”)给我一个语法错误。

有什么问题吗?我尝试了其他不同的方法,但其中 none 行得通。我对其他方式持开放态度,但我认为我很接近。只是一个小语法问题。

非常感谢

I'm trying to average the last 10 values from column "values" of my SQL table.

您可以使用子查询来做到这一点:

select avg(value)
from (select f16.*
      from f16
      order by dateEvent desc
      limit 10
     ) f;

Window 您描述的问题不需要函数。

编辑:

根据您的评论:

select f16.*,
       avg(value) over (order by dateevent rows between 10 preceding and current row) as avg_10
from f16;

Here 是一个 db<>fiddle.