【发布时间】:2021-07-13 22:05:00
【问题描述】:
给定以下简单表格:
+-----+-------------+-----------+---------+----+
| id_ | match_op_id | bookie_id | version | p1 |
+-----+-------------+-----------+---------+----+
| 1 | 1 | 1 | 1 | 1 |
| 2 | 1 | 2 | 1 | 5 |
| 3 | 1 | 1 | 2 | 3 |
| 4 | 1 | 2 | 2 | 4 |
| 5 | 2 | 1 | 1 | 5 |
| 6 | 2 | 2 | 1 | 3 |
| 7 | 2 | 2 | 2 | 4 |
+-----+-------------+-----------+---------+----+
我想构建一个查询,从每个 @ 的最大 version 中为每个 match_op_id 选择单个记录的 match_op_id、bookie_id 和 p1 字段(无关紧要) 987654327@,然后是最大值p1。所以从上面我会得到输出:
+-------------+-----------+----+
| match_op_id | bookie_id | p1 |
+-------------+-----------+----+
| 1 | 2 | 4 |
| 2 | 1 | 5 |
+-------------+-----------+----+
从我得到的另一个问题的答案来看:
SELECT o1.match_op_id, o1.bookie_id, MAX(o1.p1) p1
FROM odds_op o1
WHERE o1.version = (SELECT MAX(o2.version) FROM odds_op o2 WHERE o2.match_op_id = o1.match_op_id)
GROUP BY o1.match_op_id
但是,我不知道如何通过bookie_id 实现最大version。任何帮助将不胜感激。
编辑:
为了解决 cmets 中提出的问题...对于每个 match_op_id,我正在寻找查询以查找最高 version by bookie_id,然后返回最高 p1。所以在上面的例子中 match_op_id "2" 那么bookie_id "1" 的最大 version 是 "1",而 p1 是 "5"。 version 的最大值为 bookie_id“2”为“2”,p1 为“4”。因此查询应该返回bookie_id“1”和“5”的p1。
【问题讨论】:
-
SELECT VERSION();返回什么?最佳答案取决于您是否可以使用窗口函数来运行排名查询。 -
嗨@BillKarwin - 我已经添加了版本。我想获取生成的 SQL 并将其转换为 Python 代码,并且很确定我不能在那里使用窗口函数
-
这不是 1,2,5 和 2,2,4 吗?...
-
我刚刚添加了一个答案,但我不确定
p1是否必须依赖bookie_id,因为您的问题可能包含不准确之处... -
@St3an - 抱歉我这周不在。上面的输出是正确的,因为我正在寻找查询以通过
bookie_id查找最高的version,然后返回最高的p1。所以在上面的例子中match_op_id"2" 那么bookie_id"1" 的最大version是 "1",p1是 "5"。version对于bookie_id“2”的最大值是“2”,p1是“4”。因此查询应该返回bookie_id“1”,p1为“5”。