我有这样的mysql表t1:
我想要做的是在所有行之间进行计算,并将值保存在名为diff
的新coloumn中TICKETID| DATENEW | DIFF
16743 12:36:46 0
16744 12:51:25 15. minute
16745 12:57:25 6.5 minute
..........
.......
etc
我知道有类似的问题,但香港专业教育学院尝试了所有的解决方案 贴在这里没有成功,所以如何解决这个问题???
答案 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
条件。