sql >> Database >  >> RDS >> Mysql

Langzame zoekopdracht:vind het verschil tussen waarden op basis van min en max in een andere kolom voor elke groep

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;


  1. Hoe krijg ik een geheel getal van MySQL als geheel getal in PHP?

  2. Android - Ruby on Rails - MySQL

  3. MS SQL Server-referenties opslaan in een MySQL-database

  4. Hoe krijg ik een telling, zelfs als er geen resultaten zijn die overeenkomen met mysql?