表名 = 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中实现平均时间
答案 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;
调整日期比较以准确获取所需的时间段。