В MySQL 8+ вы можете использовать оконные функции и условное агрегирование
select t.id,
sum(case when seqnum = 1 then value else - value end) as diff
from (select t.*,
row_number() over (partition by id order by time desc) as seqnum
from elbat t
) t
where seqnum in (1, 2)
group by id
order by max(time) desc
limit 2;
Эту же идею можно адаптировать к более ранним версиям, используя переменные:
select t.id,
sum(case when seqnum = 1 then value else - value end) as diff
from (select t.*,
(@rn := if(@i = id, @rn + 1,
if(@i := id, 1, 1)
)
) as seqnum
from (select t.* from elbat t order by id, time desc) t cross join
(select @i := -1, @rn := 0) params
) t
where seqnum in (1, 2)
group by id
order by max(time) desc
limit 2;