Als ik het goed begrijp, wil je het verschil tussen de twee meest recente rijen voor elke fix_id
waar type = 'avg'
.
Als dat zo is, zou ik variabelen en voorwaardelijke aggregatie voorstellen:
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;