我不知所措,希望得到一些帮助。我已经搜索过SOF,谷歌并尝试了尽可能多的事情,但却无法获得与我之后相近的任何事情(到目前为止,我的尝试没有任何意义)。
结果表
result_id
wcics_live_id
class_id
main
round_num
results_drivers表
rd_id
result_id
user_id
race_time (ex. 5:06.231, this is minutes:seconds)
laps (ex. 25)
对于每个class_id,驱动程序在results_drivers表中将有3个条目,例如:
Luke Pittman 25 laps 5:06.231
Luke Pittman 24 laps 5:00.691
Luke Pittman 25 laps 5:05.914
此外,每个班级都有多个驱动程序 - 可能多达40或50个。
我需要能够以最快的时间(最高圈数和最低比赛时间)收集所有驱动程序的列表,但只返回每个驱动程序的一个结果。例如:
Faster Guy 26 laps 5:11.134
Luke Pittman 25 laps 5:05.914
Joe Doe 25 laps 5:06.014
Other Guy 24 laps 5:00.141
... and so on
通常我会在列上使用最大值(或类似的东西)进行分组,但我不知道如何使用2个单独的列来实现这一点。
答案 0 :(得分:0)
我会使用MAX(laps) ... GROUP BY user_id
进行查询,然后将其作为另一个查询中的内联视图引用,以获得最小的race_time
这样的事情:
SELECT ft.user_id
, ft.laps
, MIN(ft.race_time) AS race_time
FROM ( -- maximum laps
SELECT dr.user_id
, MAX(dr.laps) AS max_laps
FROM driver_results dr
GROUP BY dr.user_id
) ml
JOIN driver_results ft
ON ft.user_id = ml.user_id
AND ft.laps = ml.laps
GROUP
BY ft.user_id
, ft.laps
ORDER
BY laps ASC
, race_time DESC
(我在这里假设laps
和race_time
列是规范的,这样ORDER BY和MIN / MAX将能够获得最高圈数和最快时间。如果这些是存储为字符串,然后它不一定正常工作。即如果比较字符串:'10:23.456'将小于'8:15.555'。