作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我似乎无法解决这个问题。我确定它需要子查询,但我别无选择。我的大脑无法处理这个或其他东西。我需要帮助:)
我有一个赔率网站。每隔 15 分钟,我就会从各个博彩公司导入特定赛事的最新赔率(赢/平/输 -- 或 1/X/2)。
赔率表的每一行都有odds_type
('1'、'X'或'2'),odds_index
是实际赔率,bookmaker_id
和 event_id
。
但同样重要的是:created_at
,因为我需要处理来自最新导入 的可能性。由于显而易见的原因,它非常重要。
在下表中,我们使用的是 event_id
#1 的导入赔率。
event_id
= 1 的最新导入赔率集(在此示例中为 9 条记录)odds_type
“1”、“X”、“2”的最高 odds_index
记录。现在我更喜欢使用 Rails 范围来做到这一点,所以我可以使用 @event.best_odds1
和 @event.best_odds2
,但如果可以,我会采用任何方法作品。我为此绞尽脑汁 5 天了。需要解决。
查询后我得到了 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()
两次:
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 移到那里。当 Odds 表中只有最新的 Odds 时,您的查询将变得更加简单。
关于sql - 对我的智力来说,太多的 order by, max, 子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10985767/
我是一名优秀的程序员,十分优秀!