Mysql 如何编写SQL查询来计算三个连续值的平均值?

Mysql 如何编写SQL查询来计算三个连续值的平均值?,mysql,sql,Mysql,Sql,我有一张这样的桌子 userID time NoOfVisits 1 2014 50 2 2015 60 3 2016 70 4 2017 80 5 2018 90 6 2019 100 我需要写一个sql查询,将打印时间和过去3年的平均NoOfVisits为一个特定的网站 输出应如下所示 userID tim

我有一张这样的桌子

userID    time    NoOfVisits
  1       2014       50
  2       2015       60
  3       2016       70
  4       2017       80
  5       2018       90
  6       2019       100
我需要写一个sql查询,将打印时间和过去3年的平均NoOfVisits为一个特定的网站

输出应如下所示

userID    time    NoOfVisits   
  1       2014    50.0000
  2       2015    55.0000
  3       2016    60.0000
  4       2017    70.0000
  5       2018    80.0000
  6       2019    90.0000
说明:

对于用户Id 6(80+90+100)/3=90.0000


请帮我解决这个问题。

您可以使用MySQL 8+中提供的累积平均值:

select t.*,
       avg(visits) over (order by time rows between 2 preceding and current row) as avg_visits_3
from t;

假设年份之间没有间隔(如您的样本数据),您可以自行加入表并按用户ID、时间分组,以获得平均值:

select
  t.userid, t.time, avg(tt.noofvisits) NoOfVisits
from tablename t inner join tablename tt
on tt.time between t.time - 2 and t.time
group by t.userid, t.time
请参阅。
结果:


您使用的是哪个版本的MySQL?你应该如何处理两者之间的一年?请将这些详细信息添加到问题中。可能重复
| userid | time | NoOfVisits |
| ------ | ---- | ---------- |
| 1      | 2014 | 50         |
| 2      | 2015 | 55         |
| 3      | 2016 | 60         |
| 4      | 2017 | 70         |
| 5      | 2018 | 80         |
| 6      | 2019 | 90         |