如何使用SQLite基于GROUP BY中前一行的列计算值?

时间:2018-03-18 22:30:13

标签: sql sqlite android-sqlite

例如,如果有下表:

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

1 个答案:

答案 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没有任何内容。