计算mysql中过去7天的平均时间

jgovgodb  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(387)

tablename=运行详细信息
我必须计算过去7天的平均作业时间,但在某些情况下,运行次数可能少于7天。只有两个运行日期(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中的平均时间吗

osh3o9ms

osh3o9ms1#

如果您希望在前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;

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

相关问题