当前位置:   article > 正文

关于MYSQL中计算时间差的方法:时间戳字段相减法与timestampdiff方法的区别_计算出来的时间差和timestampdiff 算出来的不一样

计算出来的时间差和timestampdiff 算出来的不一样

一、sql测试错误

牛客sql题:SQL157 平均播放进度大于60%的视频类别

平均播放进度大于60%的视频类别:

  • 代码运行逻辑没错, 但是测试用例通过不了
  1. select tag,
  2. concat(round(avg(case when (end_time-start_time)<=duration then (end_time-start_time)/duration else 1 end)*100,2),'%') as avg_play_progress
  3. from tb_user_video_log as us
  4. join tb_video_info as vd
  5. on us.video_id=vd.video_id
  6. group by tag
  7. having replace(avg_play_progress,'%','') > 60
  8. order by avg_play_progress desc
  • 显示:

  • 但是将时间戳方法换成timestampdiff后, 就可以通过

  1. select tag,
  2. concat(round(avg(case when timestampdiff(second,start_time,end_time)<=duration then timestampdiff(second,start_time,end_time)/duration else 1 end)*100,2),'%') as avg_play_progress
  3. from tb_user_video_log as us
  4. join tb_video_info as vd
  5. on us.video_id=vd.video_id
  6. group by tag
  7. having replace(avg_play_progress,'%','') > 60
  8. order by avg_play_progress desc

 二、原因分析

使用TIMESTAMPDIFF函数与直接使用两个字段进行作差,两种方法存在区别:

1.如果用end_time − start_ time ,那么两个时间戳的时间差是以100为进制。

例如相差1分钟,但查询出来的是却是100。

2.如果用 timestampdiff(second,start_time,end_time),时间差是按正常60为进制。

例如相差1分钟,运算结果就为60。

参考:https://blog.csdn.net/qq_41688840/article/details/123450457

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/596790
推荐阅读
相关标签
  

闽ICP备14008679号