2015-08-16 121 views
0

我有mysql表T1是這樣的:如何計算當前和以前的行之間的時間差在MySQL

t1 table " temporally created table from previous query

我想要做的是盡行之間的計算和保存新coloumn價值所謂差異

TICKETID| DATENEW | DIFF 
16743  12:36:46 0 
16744  12:51:25 15. minute 
16745  12:57:25 6.5 minute 
.......... 
....... 
etc 

我知道有類似的問題,但香港專業教育學院嘗試了所有張貼在這裏沒有成功的解決方案 的,所以如何解決這個查詢???

+0

你需要將表與自身的相關子查詢。在Sql Server中,您可以使用LAG或LEAD窗口函數,這些函數可以更好地執行** **。 –

+0

感謝你的回覆,可以ü給我一個例子,讓它更加清晰... – luka

回答

1

爲了獲得在當前和以前的行之間分鐘的時間差,可以使用timestampdiffdatenow和以前的時間,您可以通過子查詢得到:

select ticketid, datenew, 
    timestampdiff(minute,datenew,(select datenew from mytable t2 
     where t2.ticketid < t1.ticketid order by t2.ticketid desc limit 1)) as diff 
from mytable t1 

更新

以下是使用變量來存儲之前可能更快的datenew值的另一種方法:

select ticketid, datenew, timestampdiff(minute,datenew,prevdatenew) 
from (
    select ticketid, datenew, @prevDateNew as prevdatenew, 
     @prevDateNew := datenew 
    from mytable order by ticketid 
) t1 
+0

你解決我的答案就像一個魔術,但我需要知道如何@prevDateNew得到你以前使用的方式它在這qury ..,如果你好心地描述我如何執行這個查詢步驟,以瞭解更多關於MYSQL查詢 – luka

+0

爲每行(按'ticketid'),'@prevDateNew:= datenew'存儲'datenew'在一個變量中,所以當下一行被提取時'@ prevDateNew'具有前一行'datenew'的值 – FuzzyTree

0
select 
t1.* 
,coalesce(timestampdiff(MINUTE,t2.dt,t1.dt),0) as tdiff 
from t t1 left join t t2 
on t1.id = t2.id+1 
order by t1.id 

由於您只查找當前行與下一行之間的差異,可以加入下一行並計算以分鐘爲單位的時間差。

注意:這裏假定表中沒有缺少id。如果缺少ID,則可能必須更改join條件。

SQL小提琴:http://www.sqlfiddle.com/#!9/4dcae/15

+0

它不適用於我,它給出錯誤:無法重新打開表:'t1' – luka

+0

您應該替換'你的表名。還要根據您的表更改列名稱。 –

+0

好吧我會再試一次,並告訴你回來,再次感謝你 – luka

相關問題