sql >> Database teknologi >  >> RDS >> Mysql

Langsom forespørgsel:find forskel mellem værdier baseret på min og max i en anden kolonne for hver gruppe

Hvis jeg forstår det rigtigt, vil du have forskellen mellem de to seneste rækker for hver fix_id hvor type = 'avg' .

Hvis ja, vil jeg foreslå variabler og betinget aggregering:

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. Sådan fungerer CHARINDEX()-funktionen i SQL Server (T-SQL)

  2. MySQL-forespørgsel - find nye brugere pr. dag

  3. Fejlmeddelelse Utermineret streng literal

  4. Ret fejl "ORA-01790:udtryk skal have samme datatype som tilsvarende udtryk"