Mi reacción inicial fue usar LIMIT para restringir el promedio a 5 resultados, lo que me llevó 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;
Pero está claro que esto limita el promedio a los 5 trabajos más recientes y no a los 5 trabajos más recientes por host.
Parece difícil usar LIMIT para restringir el promedio, sin usar algún tipo de procedimiento almacenado. Esto me llevó a considerar la posibilidad de asignar a cada trabajo una orden de finalización o posición por host mediante una variable mysql.
Esto no se ha probado, pero la teoría que ilustra debería ser un buen punto de partida:
Primero, debemos asignar a cada trabajo una posición basada en su anfitrión:
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;
Después de establecer la posición, simplemente seleccione la función agregada, restringiendo los resultados a las 5 primeras posiciones:
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;
Avíseme si esto funciona para usted o si hay más aspectos que no he considerado. Este es un problema intrigante.