Mega Code Archive

 
Categories / MySQL / Join
 

Calculating Differences Between Successive Rows

mysql> mysql> mysql> CREATE TABLE trip_log     -> (     ->  seq             INT UNSIGNED NOT NULL AUTO_INCREMENT,     ->  city    VARCHAR(30) NOT NULL,   # location of stop     ->  t               DATETIME NOT NULL,              # time of stop     ->  miles   INT UNSIGNED NOT NULL,  # miles traveled so far     ->  fuel    DECIMAL(6,3),                   # gas used between citees     ->  PRIMARY KEY (seq)     -> ); Query OK, 0 rows affected (0.00 sec) mysql> mysql> INSERT INTO trip_log (t, city, miles, fuel)     -> VALUES     ->  ('2010-10-23 05:00:00', 'San Antonio, TX', 0, 0),     ->  ('2010-10-23 09:10:00', 'Dallas, TX', 263, 11.375),     ->  ('2010-10-23 13:40:00', 'Benton, AR', 566, 12.398),     ->  ('2010-10-23 16:51:00', 'Memphis, TN', 745, 6.820),     ->  ('2010-10-23 19:06:00', 'Portageville, MO', 745+133, 7.007),     ->  ('2010-10-23 23:16:00', 'Champaign, IL', 745+419, 11.354),     ->  ('2010-10-24 03:27:00', 'Madison, WI', 745+667, 13.016)     -> ; Query OK, 7 rows affected (0.00 sec) Records: 7  Duplicates: 0  Warnings: 0 mysql> mysql> SELECT * FROM trip_log; +-----+------------------+---------------------+-------+--------+ | seq | city             | t                   | miles | fuel   | +-----+------------------+---------------------+-------+--------+ |   1 | San Antonio, TX  | 2010-10-23 05:00:00 |     0 |  0.000 | |   2 | Dallas, TX       | 2010-10-23 09:10:00 |   263 | 11.375 | |   3 | Benton, AR       | 2010-10-23 13:40:00 |   566 | 12.398 | |   4 | Memphis, TN      | 2010-10-23 16:51:00 |   745 |  6.820 | |   5 | Portageville, MO | 2010-10-23 19:06:00 |   878 |  7.007 | |   6 | Champaign, IL    | 2010-10-23 23:16:00 |  1164 | 11.354 | |   7 | Madison, WI      | 2010-10-24 03:27:00 |  1412 | 13.016 | +-----+------------------+---------------------+-------+--------+ 7 rows in set (0.00 sec) mysql> mysql> SELECT t1.seq AS seq1, t2.seq AS seq2,     -> t1.city AS city1, t2.city AS city2,     -> t1.miles AS miles1, t2.miles AS miles2,     -> t2.miles-t1.miles AS dist     -> FROM trip_log AS t1, trip_log AS t2     -> WHERE t1.seq+1 = t2.seq     -> ORDER BY t1.seq; +------+------+------------------+------------------+--------+--------+------+ | seq1 | seq2 | city1            | city2            | miles1 | miles2 | dist | +------+------+------------------+------------------+--------+--------+------+ |    1 |    2 | San Antonio, TX  | Dallas, TX       |      0 |    263 |  263 | |    2 |    3 | Dallas, TX       | Benton, AR       |    263 |    566 |  303 | |    3 |    4 | Benton, AR       | Memphis, TN      |    566 |    745 |  179 | |    4 |    5 | Memphis, TN      | Portageville, MO |    745 |    878 |  133 | |    5 |    6 | Portageville, MO | Champaign, IL    |    878 |   1164 |  286 | |    6 |    7 | Champaign, IL    | Madison, WI      |   1164 |   1412 |  248 | +------+------+------------------+------------------+--------+--------+------+ 6 rows in set (0.00 sec) mysql> mysql> mysql> drop table trip_log; Query OK, 0 rows affected (0.00 sec)