Вам необходимо объединить основную таблицу с запросом, который рассчитывает изменение уровней:
select levels.id, t.name, t.gained, t.timestamp
from (
select
name,
max(level) - min(level) gained,
max(timestamp) timestamp
from levels
where timestamp > now() - interval 10 hour
group by name
) t inner join levels
on
t.timestamp = levels.timestamp
and
t.name = levels.name
where levels.timestamp > now() - interval 10 hour
order by t.gained desc, t.name
Я полагаю, что отметка времени в ожидаемом выводе, который вы опубликовали около superman
, неверна и должна быть 2019-01-06 11:39:49
.
Смотрите демо