我似乎无法解决此查询。我确定它需要子查询,但是我没有选择。我的大脑无法应付这些。我需要帮助 :)
我有一个赔率网站。每隔15分钟,我会从各庄家那里输入特定事件的最新赔率(赢/平/输-或1 / X / 2)。
赔率表的每一行都有odds_type(‘1’,’X’或‘2’),odds_index这是实际赔率,bookmaker_id和和event_id。
odds_type
odds_index
bookmaker_id
event_id
但同样重要:created_at因为我需要处理 最新import 的赔率。由于显而易见的原因,它非常重要。
created_at
在下表中,我们正在处理event_id#1的导入赔率。
现在,我更喜欢在Rails范围内执行此操作,因此我可以使用@event.best_odds1和@event.best_odds2,但是如果可行的话,我将采取任何方法。在这上面花了5天时间让我的大脑崩溃。需要解决。
@event.best_odds1
@event.best_odds2
查询后,我得到3条记录,因此我可以显示“事件#1的最佳赔率”。
庄家
ID | NAME ---------------------- 1 | Unibet 2 | 888 3 | Ladbrokes
大事记
ID | NAME -------------------------- 1 | Holland vs Denmark 2 | England vs Germany 3 | France vs Spain
赔率
ID | OT | OI | BI | EI | CREATED_AT --------------------------------------------------- (first import from the bookies) 1 | '1' | 2.4 | 1 | 1 | 2010-06-10 15:00 2 | 'X' | 1.5 | 1 | 1 | 2010-06-10 15:00 3 | '2' | 6.2 | 1 | 1 | 2010-06-10 15:00 4 | '1' | 2.2 | 2 | 1 | 2010-06-10 15:58 5 | 'X' | 1.8 | 2 | 1 | 2010-06-10 15:58 6 | '2' | 5.2 | 2 | 1 | 2010-06-10 15:58 7 | '1' | 2.8 | 3 | 1 | 2010-06-10 16:56 8 | 'X' | 1.3 | 3 | 1 | 2010-06-10 16:56 9 | '2' | 7.1 | 3 | 1 | 2010-06-10 16:56 (last import from the bookies) 10 | '1' | 2.5 | 1 | 1 | 2010-06-11 17:10 11 | 'X' | 1.3 | 1 | 1 | 2010-06-11 17:10 12 | '2' | 6.4 | 1 | 1 | 2010-06-11 17:10 13 | '1' | 2.1 | 2 | 1 | 2010-06-11 18.12 14 | 'X' | 1.2 | 2 | 1 | 2010-06-11 18:58 15 | '2' | 6.2 | 2 | 1 | 2010-06-11 18:58 16 | '1' | 1.8 | 3 | 1 | 2010-06-12 14:56 17 | 'X' | 2.3 | 3 | 1 | 2010-06-12 14:56 18 | '2' | 5.1 | 3 | 1 | 2010-06-12 14:56
列名缩写以适合屏幕显示
OT = odds_type OI = odds_index BI = bookmaker_id EI = event_id
您可以使用row_number()两次:
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, 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
但是,如果表格不断增长,这将导致性能下降。您可以添加一个历史记录表,例如OddsHistory,然后将过时的Odds移动到该表中。当赔率表中只有最新的赔率时,您的查询将变得更加简单。
SQL Fiddle的实时示例。