您可以使用
row_number()两次:
select *from ( select * , row_number() over (partition by OT order by OI desc) as rn2 from ( select * , row_number() over (partition by EI, BI, OTorder by created_at desc) as rn1 from Odds where EI = 1 -- for event 1 ) sub1 where rn1 = 1 -- Latest row per EI, BI, OT ) sub2where rn2 = 1 -- Highest OI per OT
但是,如果表格不断增长,这将导致性能下降。您可以添加一个历史记录表,例如OddsHistory,然后将过时的Odds移动到该表中。当赔率表中只有最新的赔率时,您的查询将变得更加简单。
SQL Fiddle的实时示例。



