2014-09-23 66 views
1

我無法解決這個問題(比賽),我需要顯示每個LAP的時間。這是多次表組,計數和連續圈

id | race_id  | car_num | time  | 
+-----+-------------+---------+------------+ 
1  | 8   | 25  | 00:09:05 | 
2  | 8   | 33  | 00:09:35 | 
3  | 8   | 10  | 00:09:55 | 
4  | 8   | 25  | 00:18:15 | 
5  | 8   | 33  | 00:19:05 | 
6  | 8   | 25  | 00:39:45 | 

我嘗試此查詢:

SELECT 
    car_num, COUNT(car_num) as laps, race_id, concat(vlap,'-',time) as times 
FROM 
    (SELECT num_car, concat(time,'-',v1) vlap 
    FROM tiempos) vti 
GROUP BY 
    car_num 

這是必需的輸出:

car_num | laps  | race_id | times          | 
+-----+-------------+---------+------------------------------------------------+ 
25   | 3  | 8  | lap1 00:09:05, lap2 00:18:15, lap3 00:39:45 | 
33   | 2  | 8  | lap1 00:09:35, lap2 00:19:05     | 
10   | 1  | 8  | lap1 00:09:55        | 

我暈,一些想法,請

回答

2

你可以得到大部分你想要的都是簡單的group_concat()

select car_num, count(*) as laps, race_id, group_concat(time order by id separator ', ') as times 
from tiempos t 
group by car_num, race_id; 

如果你需要的圈數,你可以得到使用變量:

select car_num, count(*) as laps, race_id, group_concat('lap', rn, ' ', time order by id separator ', ') as times 
from (select t.*, 
      (@rn := if(@t = time, @rn + 1, 
         if(@t := time, 1, 1) 
         ) as rn 
     from tiempos t cross join 
      (select @rn := 0, @t := '') vars 
     order by race_id, car_num, time 
    ) t 
group by car_num, race_id; 
+0

謝謝朋友!!!!已解決 – 2014-09-23 02:30:48

+0

爲什麼要檢查'if(@t = time'兩次?不應該只是'if(@t = time,@rn + 1,1)'? – sgeddes 2014-09-23 02:31:38

+1

@sgeddes ...您需要完成這項任務,MySQL並不保證表達式在'select'中的評估順序,因此,所有與這些變量相關的工作都被放入一個表達式。 – 2014-09-23 03:03:05