Minha reação inicial foi usar LIMIT para restringir a média a 5 resultados, o que me levou a sugerir:
select a.host, avg(a.execution_time) from (select id, execution_time, host from jobs order by id desc limit 5) a group by a.host;
Mas é claro que isso limita a média aos 5 trabalhos mais recentes, e não aos 5 trabalhos mais recentes por host.
Parece difícil usar LIMIT para restringir a média, sem usar algum tipo de procedimento armazenado. Isso me levou a considerar atribuir a cada trabalho uma ordem de conclusão por host, ou posição, usando uma variável mysql.
Isso não foi testado, mas a teoria que ilustra deve ser um bom ponto de partida:
Primeiro, devemos atribuir a cada trabalho uma posição com base em seu host:
select
host,
execution_time,
@current_pos := if (@current_host = host, @current_pos, 0) + 1 as position,
@current_host := host
from
(select @current_host := null, @current_pos := 0) set_pos,
jobs
order by
host,
id desc;
Após estabelecer a posição, basta selecionar a função agregada, restringindo os resultados às 5 primeiras posições:
select
jt.host,
avg(jt.execution_time)
from
(
select
host,
execution_time,
@current_pos := if (@current_host = host, @current_pos, 0) + 1 as position,
@current_host := host
from
(select @current_host := null, @current_pos := 0) set_pos,
jobs
order by
host,
id desc
) jt
where
jt.position <= 5
group
by host;
Por favor, deixe-me saber se isso funciona para você, ou se há mais aspectos que eu não considerei. Este é um problema intrigante.