Ако разбирам правилно, искате разликата между двата най-скорошни реда за всеки fix_id
където type = 'avg'
.
Ако е така, бих предложил променливи и условно агрегиране:
select fix_id,
max(case when rn = 1 then odds end) as odds,
max(case when rn = 1 then market end) as market,
max(case when rn = 1 then away end) as away,
sum(case when rn = 1 then odds when rn = 2 then - odds end) as diff,
max(type) as type
from (select ao.*,
(@rn := if(@f = fix_id, @rn + 1,
if(@fn := fix_id, 1, 1)
)
) as rn
from (select ao.*
from average_odds ao
where type = 'avg'
order by ao.fix_id, ao.updated desc
) ao cross join
(select @f := -1, @rn := 0) params
) ao
where rn <= 2
group by fix_id;