计算最近7天在mysql中的平均时间

时间:2020-07-14 10:13:38

标签: mysql sql mysql-workbench

表名 = run_detail

我必须计算最近7天的平均工作时间,但在某些情况下 运行次数可能少于7天。例如abc只有2个run_date。 (4.5 + 6 + ..... + 7)/7=5.83 (23.9 + 45.7)/2=34.8 根据最近的7次运行进行计算。例如 2020-07-04至2020-07-10 , 不是来自 2020-07-01

Job_name run_date   rownum count  elapsed_time(sec) avg_time
xyz      2020-07-01   1     10       4.5             ?
xyz      2020-07-02   2     10       6               ?
.......  
xyz      2020-07-10   10    10       7.0             ?
abc      2020-07-01   1      2       23.9            ?
abc      2020-07-02   2      2       45.7            ?

所需的输出

Job_name run_date   rownum count  elapsed_time(sec) avg_time
xyz      2020-07-01   1     10       4.5             5.83
xyz      2020-07-02   2     10       6               5.83
.......  
xyz      2020-07-10   10    10       7.0             5.83
abc      2020-07-01   1      2       23.9            34.8
abc      2020-07-02   2      2       45.7            34.8

能否请您帮助在mysql中实现平均时间

1 个答案:

答案 0 :(得分:0)

如果要在过去7天内超支,可以使用窗口功能:

select t.*,
       avg(elapsed_time) over (partition by job_name
                               order by run_date
                               range between interval -6 day preceding and current row
                              ) as avg_time
from t;

注意:假设您确实要在前六天加上当前日期。如果您确实想要7天前到1天前(前一周),请使用:

range between interval -7 day preceding and interval -1 day preceding

编辑:

在旧版本的MySQL中,您可以使用相关子查询:

select t.*,
       (select avg(t2.elapsed_time)
        from t t2
        where t2.job_name = t.job_name and
              t2.run_date <= t.run_date and
              t2.run_date > t.run_date - interval 7 day
       ) as avg_time
from t;

调整日期比较以准确获取所需的时间段。