2015-08-16 74 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

相关问题