如何计算MySQL中当前行与上一行之间的时差

时间:2015-08-16 23:15:35

标签: mysql sql

我有这样的mysql表t1:

t1 table " temporally created table from previous query

我想要做的是在所有行之间进行计算,并将值保存在名为diff

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

我知道有类似的问题,但香港专业教育学院尝试了所有的解决方案 贴在这里没有成功,所以如何解决这个问题???

2 个答案:

答案 0 :(得分:1)

要获得当前行和上一行之间的分钟时差,您可以在timestampdiff上使用datenow以及之前的时间,您可以通过子查询获取:

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

答案 1 :(得分: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

相关问题