MySQL:以组比率/ delta计算第一到第二

时间:2017-11-10 17:46:38

标签: mysql

我有一张包含汽车比赛结果的表格:

race_id   participant_id   time
1         15               1.0
1         21               1.05
1         27               2
2         27               2.55
2         15               2.75
2         21               3.45

我需要每个组中fisrt和第二个参与者之间的聚合表包含delta。使用窗口函数很容易完成,但MySQL中没有这样的选项:

race_id   winner  delta_to_second
1         15      0.05
2         27      0.2

如何在MySQL中完成这项工作?

2 个答案:

答案 0 :(得分:1)

我会接受这个......但是更有效的选择......

DROP TABLE IF EXISTS my_table;

CREATE TABLE my_table
(race_id INT NOT NULL
,participant_id INT NOT NULL
,time DECIMAL (5,2) NOT NULL
,PRIMARY KEY(race_id,participant_id)
);

INSERT INTO my_table VALUES
(1,15,1.0),
(1,21,1.05),
(1,27,2),
(2,27,2.55),
(2,15,2.75),
(2,21,3.45);

SELECT x.*
     , MIN(y.time - x.time) delta 
  FROM my_table x 
  JOIN my_table y 
    ON y.race_id = x.race_id 
   AND y.time > x.time 
  JOIN 
     ( SELECT race_id
            , MIN(time) time 
         FROM my_table 
        GROUP  
           BY race_id
     ) z 
    ON z.race_id = x.race_id 
   AND z.time = x.time 
 GROUP 
    BY race_id
     , participant_id
     , time;
+---------+----------------+------+-------+
| race_id | participant_id | time | delta |
+---------+----------------+------+-------+
|       1 |             15 | 1.00 |  0.05 |
|       2 |             27 | 2.55 |  0.20 |
+---------+----------------+------+-------+

答案 1 :(得分:1)

考虑支持Windows函数的MYSQL8。