2015-10-10 3 views
1

Я пытаюсь создать запрос к MotoGP результат Вот мой SQLFiddleMYSQL Diff От MAX

Я хочу добавить еще 2 колонки

  1. Pos (1, 2, 3, 4, ...)
  2. Зазор (наездник Laptime - первый пос Laptime)

желаемого результата:

  • 1 | Маркес | 2799.627 | 2799.627
  • 2 | Росси | 2803.143 | 3,516

enter image description here

мой текущий запрос:

SELECT `rider`, SUM(laptime), COUNT(`lapno`), MAX(`topspeed`) AS ts 
FROM 
    (SELECT 
    `lapno`,`rider`, (t1+t2+t3+t4) as laptime , `topspeed` 
    FROM `a_lap_time` as t_laptime) AS a 
GROUP BY a.rider 
ORDER BY COUNT(`lapno`) DESC, SUM(laptime) ASC 

пожалуйста посоветуйте, спасибо

+0

Когда вы говорите разное время круга, что вы имеете в виду? –

+0

извините за минута, в этом случае 2803.143 - 2799.627 – vincmeister

+0

Итак, Маркес закончил через 0 секунд? – Strawberry

ответ

0

Этот результат

|   rider | laptime | Gap | lapno | ts | 
|-----------------|----------|--------|-------|-------| 
| Marc MARQUEZ | 2799.627 |  0 | 30 | 329.3 | 
| Valentino ROSSI | 2803.143 | 3.516 | 30 | 319.7 | 

производства:

SELECT 
    `rider`, laptime, laptime - minlaptime as Gap, lapno, ts 
FROM (
     SELECT 
      `rider`, laptime, lapno, ts, @lap := IF(@lap = 0.0, laptime, @lap) as minlaptime 
     FROM (
      SELECT `rider`, SUM(laptime) as laptime , COUNT(`lapno`) as lapno 
       , MAX(`topspeed`) AS ts 
      FROM 
       (SELECT 
       `lapno`,`rider`, (t1+t2+t3+t4) as laptime , `topspeed` 
       FROM `a_lap_time` as t_laptime 
       ) AS a 
      GROUP BY a.rider 
      ) AS b 
     CROSS JOIN (select @lap :=0) var 
     ORDER BY `lapno` DESC, laptime ASC 
    ) AS c 

переменной: @lap "привязанного" к каждой строке с помощью перекрестного соединения, затем с помощью ORDER BY, чтобы получить минимальный общий латфейс мы передаем это значение в @lap. Как только это будет сделано, мы получим значение 2799.627 для каждой строки, и мы можем вычислить Gap.

Смотрите эту sqlfiddle: http://sqlfiddle.com/#!9/bd71f/6

для поз, а также:

SELECT 
    `rider`, laptime, laptime - minlaptime as Gap, lapno, ts, pos 
FROM (
     SELECT 
      `rider`, laptime, lapno, ts 
      , @lap := IF(@lap = 0.0, laptime, @lap) as minlaptime 
      , @pos := @pos + 1 as pos 
     FROM (
      SELECT `rider`, SUM(laptime) as laptime , COUNT(`lapno`) as lapno 
       , MAX(`topspeed`) AS ts 
      FROM 
       (SELECT 
       `lapno`,`rider`, (t1+t2+t3+t4) as laptime , `topspeed` 
       FROM `a_lap_time` as t_laptime 
       ) AS a 
      GROUP BY a.rider 
      ) AS b 
     CROSS JOIN (select @lap :=0, @pos := 0) var 
     ORDER BY `lapno` DESC, laptime ASC 
    ) AS c 

Результат:

|   rider | laptime | Gap | lapno | ts | pos | 
|-----------------|----------|-------|-------|-------|-----| 
| Marc MARQUEZ | 2799.627 |  0 | 30 | 329.3 | 1 | 
| Valentino ROSSI | 2803.143 | 3.516 | 30 | 319.7 | 2 | 
+0

привет, спасибо за ответ, этот пробел правильный. но мне нужно добавить столбец Pos, 1,2,3,4. помогите поблагодарить вас – vincmeister

+0

«pos» - просто простое целое число, которое увеличивается на единицу для каждой строки (упорядочено по laptime). это другая переменная –

-1
CREATe temporary TEMPtable 
SELECT `rider`, SUM(laptime) laptimesum, COUNT(`lapno`) lapnocount, MAX(`topspeed`) AS ts 
FROM 
    (SELECT 
    `lapno`,`rider`, (t1+t2+t3+t4) as laptime , `topspeed` 
    FROM `a_lap_time` as t_laptime) AS a 
GROUP BY a.rider 

SELECT rider,laptimesum,lapnocount,ts,(laptimesum - MAX(laptimesum) AS laptimediff 
from TEMPtable 
ORDER BY lapnocount DESC, laptimesum asc  

Извините за дерьмовый форматирования, на мобильном телефоне.

+0

не работает # 1064 - У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с «TEMPtable» в строке 1 – vincmeister

0

Возьмите ваш запрос, как это, просто добавить calculations with variables:

SELECT @v_pos := @v_pos + 1 AS pos, rider, sumLaptime, countLaps, 
@v_gap := sumLaptime - @v_prev_laptime + @v_gap AS gap, 
@v_prev_laptime := sumLaptime AS ignore_me 
FROM (
    SELECT `rider`, SUM(laptime) sumLaptime, COUNT(`lapno`) countLaps, MAX(`topspeed`) AS ts 
    FROM 
     (SELECT 
     `lapno`,`rider`, (t1+t2+t3+t4) as laptime , `topspeed` 
     FROM `a_lap_time` as t_laptime) AS a 
    GROUP BY a.rider 
    ORDER BY COUNT(`lapno`) DESC, SUM(laptime) ASC 
) sq 
, (SELECT @v_pos := 0, @v_gap := 0, @v_prev_laptime := 0) var_init_subquery 
ORDER BY countLaps DESC, sumLaptime 
+0

эй, спасибо, позиция правильная, но пробел возвращается NULL – vincmeister

+0

Хорошо, исправил свой ответ. Повторите попытку. – fancyPants