sql >> Databáze >  >> RDS >> PostgreSQL

Příliš mnoho objednávek podle, max, dílčích dotazů pro můj intelekt

Můžete použít row_number() dvakrát:

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

Ale pokud bude tabulka dále růst, bude to fungovat špatně. Můžete přidat tabulku historie jako OddsHistory a přesunout tam zastaralé kurzy. Když jsou v tabulce Odds pouze nejnovější Odds, váš dotaz bude mnohem jednodušší.

Živý příklad na SQL Fiddle.




  1. funkce trunc a round v sql

  2. Umožňuje uživatelům vybírat z tabulky

  3. Aktualizovat sloupec časového razítka v aplikaci nebo databázi?

  4. Chybné datum při převodu data v php