sql >> Database teknologi >  >> RDS >> PostgreSQL

For mange rækkefølge efter, max, underforespørgsler til mit intellekt

Du kan bruge row_number() to gange:

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 hvis bordet bliver ved med at vokse, vil dette fungere dårligt. Du kan tilføje en historietabel som OddsHistory og flytte forældede odds dertil. Når kun de seneste odds er i Odds-tabellen, bliver din forespørgsel meget enklere.

Live eksempel på SQL Fiddle.




  1. Hvordan VÆLGES to kolonner, hvor en kolonne skal være DISTINCT?

  2. Bestilling af punktafgrænsede numeriske sekvenser (f.eks. versionsnumre)

  3. MySQLi udarbejdede erklæringer og transaktioner

  4. MySQL - Trigger til opdatering af samme tabel efter indsættelse