Bạn có thể sử dụng row_number()
hai lần:
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
Nhưng nếu bảng tiếp tục phát triển, điều này sẽ hoạt động không tốt. Bạn có thể thêm một bảng lịch sử như OddsHistory và di chuyển các Odds lỗi thời vào đó. Khi chỉ có Tỷ lệ cược mới nhất trong bảng Tỷ lệ cược, truy vấn của bạn trở nên đơn giản hơn nhiều.
Ví dụ trực tiếp tại SQL Fiddle.