sql >> Database >  >> RDS >> PostgreSQL

Te veel volgorde door, max, subquery's voor mijn intellect

Je zou row_number() . kunnen gebruiken twee keer:

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

Maar als de tafel blijft groeien, zal dit slecht presteren. Je zou een geschiedenistabel zoals OddsHistory kunnen toevoegen en verouderde Odds daarheen kunnen verplaatsen. Als alleen de nieuwste Odds in de Odds-tabel staan, wordt uw zoekopdracht veel eenvoudiger.

Live voorbeeld bij SQL Fiddle.




  1. hoe variabele waarde met 1 te verhogen voor elke record met php mysql LOAD DATA INFILE

  2. converteer xml-gegevens naar mysql-query voor invoegen/bijwerken met php

  3. Selecteer top drie waarden in elke groep

  4. Zoeken in SQL Management Studio 2005