2

我有一张表,它有intime和的日期时间字段outtime

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

这样,我的数据就会源源不断地流过,没有“时间损失”

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

在此处输入图像描述 您可以在此处找到此示例的小提琴: http ://sqlfiddle.com/#!2/40b10/10

现在我知道表格设计等不是最佳的,只是在寻找如何让它工作的逻辑。

总结。

如何使inTime等于outtime当前银泰之前的最新值?

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

4

1 回答 1

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
于 2013-04-30T15:06:35.860 回答