例如,如果有下表:
id INTEGER PRIMARY KEY
fk_driver_id INTEGER -- ignore this for now
lap INTEGER
lap_time INTEGER -- date stored as epoch
我如何根据这些数据计算每圈的准确时间。我想做一个GROUP BY lap
,然后通过从当前的'中吸取上一轮时间来计算确切的轮时间。回合时间。
注意:lap_time
是越过终点时的总时间。
示例数据(将lap_time简化为几秒(:
id fk_driver_id lap lap_time
1 1 1 65
2 1 2 123
3 1 3 183
4 1 4 250
5 1 5 311
6 1 6 373
7 1 7 430
期望的结果:
fk_driver_id lap lap_time
1 1 65
1 2 58
1 3 60
1 4 67
1 5 61
1 6 65
1 7 62
答案 0 :(得分:2)
如果要关联同一个表的不同记录,则必须将表连接到自身并为2个实例提供不同的别名
SELECT
b.fk_driver_id,
b.lap,
b.lap_time - IFNULL(a.lap_time, 0) AS time_per_lap
FROM
MyTable b
LEFT JOIN MyTable a
ON b.lap - 1 = a.lap AND b.fk_driver_id = a.fk_driver_id
ORDER BY
b.fk_driver_id, b.lap
请参阅:SQL DEMO
我们必须为没有前一圈比较的情况(第一圈)进行外部联接。
由于每个司机和一圈只有一个lap_time
,我猜,除非你想计算一个平均单圈时间,否则GROUP BY没有任何内容。