2013-04-30 133 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