sql >> Databasteknik >  >> RDS >> PostgreSQL

För många beställ efter, max, underfrågor för mitt intellekt

Du kan använda row_number() två gånger:

select  *
from    (
        select  *
        ,       row_number() over (partition by OT order by OI desc) as rn2
        from    (
                select  *
                ,       row_number() over (partition by EI, BI, OT 
                                           order by created_at desc) as rn1
                from    Odds
                where   EI = 1 -- for event 1
                ) sub1
        where   rn1 = 1 -- Latest row per EI, BI, OT
        ) sub2
where   rn2 = 1 -- Highest OI per OT

Men om tabellen fortsätter att växa kommer detta att fungera dåligt. Du kan lägga till en historiktabell som OddsHistory och flytta föråldrade Odds dit. När endast de senaste oddsen finns i oddstabellen blir din fråga mycket enklare.

Live-exempel på SQL Fiddle.




  1. Var är den säkraste platsen att placera MySQL-anslutningsdetaljer för PHP

  2. fick mysql-fel när triggern skapades

  3. Infoga i tabellen med array-metoden med överordnat ID

  4. VÄLJA data från flera tabeller?