获得Max"圈数"但最少"时间"从3个结果中加入

时间:2018-01-02 18:03:18

标签: mysql

我不知所措,希望得到一些帮助。我已经搜索过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个单独的列来实现这一点。

1 个答案:

答案 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

(我在这里假设lapsrace_time列是规范的,这样ORDER BY和MIN / MAX将能够获得最高圈数和最快时间。如果这些是存储为字符串,然后它不一定正常工作。即如果比较字符串:'10:23.456'将小于'8:15.555'。