我有一张表,它有intime
和outtime
的日期时间字段。
我想要做的是通过查询循环表,并将intime更改为以前的记录停机时间。
通过这种方式,我的数据将不断流动而没有“时间损失”下面的图片显示了我当前的表以及我想要实现的目标。
你可以在这里找到这个例子的小提琴:
http://sqlfiddle.com/#!2/40b10/10
现在我明白表设计等不是最优的,只是寻找如何使其工作的逻辑。
总结。
如何在当前银行之前使inTime
等于最新outtime
?
我正在尝试做的事情的逻辑在下面,但是无法正常工作......
答案 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