我有一个表
+-----------+--------+------------+-------------+
| taxino | driver | allotdate | returndate |
+-----------+--------+------------+-------------+
| 31032 | John | 2014-06-13 | 2014-06-15 |
| 31032 | John | 2014-06-18 | NULL |
| 40001 | John | 2014-01-01 | 2014-06-01 |
| 40001 | Alice | 2014-06-15 | NULL |
| 40002 | Alice | 2014-05-17 | 2014-06-18 |
| 40003 | Robin | 2014-06-17 | 2014-06-18 |
+-----------+--------+------------+-------------+
这个表显示了出租车是什么时候分配给司机的,returndate列为NULL表示没有还车。
我有一个距离报告表作为
+------------+---------+------------+-----+
| taxi | reportdate | distance_in_km |
+------------+---------+------------+-----+
| 40001 | 2014-04-30 | 527 |
| 40001 | 2014-05-26 | 1497 |
| 40002 | 2014-04-30 | 1414 |
| 40002 | 2014-05-26 | 2796 |
| 40003 | 2014-04-22 | 392 |
| 40003 | 2014-05-26 | 1663 |
+------------+---------+------------+-----+
这里的距离是累加的,即在下一次报告中累加上一次报告日期行驶的距离。使用这些表,我想知道哪个司机开出租车多长时间,不管他开的是哪辆出租车。如下图:
驱动程序
| 日期
| distance_traveled_by_driver
。
这里 distance_traveled_by_driver 不是累积的,也就是说,它包含两个报告日期之间行驶的距离。请帮我做这件事。
最佳答案
此查询显示自上次报告日期以来的行驶距离
select driver, reportdate, distance_since_last from (
select t1.driver,
t2.reportdate,
if(@prevTaxi = t2.taxi,
t2.distance_in_km - @prevDistance,
t2.distance_in_km) distance_since_last,
@prevTaxi := t2.taxi,
@prevDistance := t2.distance_in_km
from table1 t1
join table2 t2 on t1.taxino = t2.taxi
cross join (select @prevDistance := 0, @prevTaxi := 0) t3
order by taxi, reportdate
) t1
关于mysql - MySQL表中累计到差分数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24858208/