mysql - MySQL表中累计到差分数据

标签 mysql sql date

我有一个表

+-----------+--------+------------+-------------+
| 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/

相关文章:

javascript - 奇怪的日期/时间差异?

mysql - VirtueMart 自定义字段 (SKU)

mysql - 存储 SQL 结果并在不同查询中用作 IN 语句

java - 更方便的JOOQ自定义类型定义

sql - 我可以通过编写 SQL 而不是 ActiveRecord 来节省内存吗?

php - 负时间戳——它在 PHP 中有意义吗?

javascript - Moment.js 夏令时转换

php - 通知及PHP+MySQL设计

Mysql windows 7数据库 Access

sql - 从 'IN' 子句保持顺序