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.