2013-04-30 112 views
2

我有一个表,它具有intimeouttime的日期时间字段。mysql查询使用前一行的值填充当前查询行

我想要做的就是通过查询循环查看表并将intime更改为以前的记录outtime。

这样会有通过我的数据的恒定流量没有“时间损失”

下图显示,目前我的表,我想达到的目标。

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

现在我明白了,该表设计等是不是最优的,只是为了寻找逻辑上如何得到这个工作。

总结。

如何使inTime等于最新的outtime在现在的银泰之前?

的什么,我试图做SOE逻辑之下,但无法正常工作......

回答

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