mysql查询使用上一行的值填充当前查询行

时间:2013-04-30 14:45:42

标签: mysql

我有一张表,它有intimeouttime的日期时间字段。

我想要做的是通过查询循环表,并将intime更改为以前的记录停机时间。

通过这种方式,我的数据将不断流动而没有“时间损失”

下面的图片显示了我当前的表以及我想要实现的目标。

enter image description here 你可以在这里找到这个例子的小提琴: http://sqlfiddle.com/#!2/40b10/10

现在我明白表设计等不是最优的,只是寻找如何使其工作的逻辑。

总结。

如何在当前银行之前使inTime等于最新outtime

我正在尝试做的事情的逻辑在下面,但是无法正常工作......

1 个答案:

答案 0 :(得分:1)

只需要ifnull正确显示第一个intime

SELECT mov.vehicle,
       ifnull((SELECT max(temp.outtime)
               FROM movement temp
               WHERE temp.outtime< mov.intime),mov.intime) as intime_calc,
       mov.outtime
FROM movement mov
ORDER BY mov.intime

http://sqlfiddle.com/#!2/40b10/23

如果您有一些记录intime已经等于上一条记录outtime,您可能希望将查询更改为:

SELECT mov.vehicle,
       ifnull((SELECT max(temp.outtime)
               FROM movement temp
               WHERE temp.outtime<= mov.intime
               AND mov.ID <> temp.ID),mov.intime) as intime_calc,
       mov.outtime
FROM movement mov
ORDER BY mov.intime