首页 > 解决方案 > 我如何获得mysql中时间戳的总持续时间?

问题描述

我有一个表,它为用户使用什么工具进行的扫描提供了时间戳。列是scan_time, login_name。该表仅提供了扫描发生时间的时间戳,因此将用户进行的第一次扫描作为开始时间,将最后一次扫描作为结束时间,我如何获得用户扫描之间的总持续时间?

SELECT scan_time, login_name
FROM table1
WHERE scan_time >= CURDATE() 

此表中的结果

|      scan_time      |  login_name  |  
| 2021-04-29 10:15:20 |    jacob     |     
| 2021-04-29 10:14:35 |    jacob     |    
| 2021-04-29 10:13:00 |    jacob     |    
| 2021-04-29 09:50:49 |    Matt      |    
| 2021-04-29 09:30:13 |    Matt      |    
| 2021-04-29 09:25:38 |    jacob     |      
| 2021-04-29 09:20:00 |    jacob     |  
| 2021-04-29 09:15:46 |    Matt      |    
| 2021-04-29 09:13:57 |    Matt      |   
| 2021-04-29 09:10:35 |    jacob     |   
| 2021-04-29 09:08:38 |    jacob     |   
| 2021-04-29 09:08:24 |    Matt      |   
| 2021-04-29 09:05:11 |    Matt      |  

我需要为每个用户扫描花费的总时间。示例login_name(jacob) 第2021-04-29 09:08:38一次扫描是在 ,最后一次扫描是在2021-04-29 10:15:20。雅各布的总持续时间应为四舍五入后的 67 分钟。

|      total_time     |  login_name  | 
|      67 minutes     |     jacob    |  
|      46 minutes     |     Matt     |  

标签: mysqltime

解决方案


尝试这个。按 login_name 分组,然后使用 timestampdiff 得到 min scan_time 和 max scan_time 之间的秒数,然后除以 60 得到分钟。

SELECT login_name, 
    timestampdiff(second, min(scan_time), max(scan_time)) / 60 as elapsed
FROM table1
WHERE scan_time >= CURDATE() 
GROUP BY login_name

如果您只需要整数级精度,您也可以将间隔设为小时而不是秒:timestampdiff(hour, min(scan_time), max(scan_time))

请参阅随附的小提琴示例。我确实将 CURDATE() 替换为“2021-04-29”,因为没有一个示例日期实际上大于或等于 CURDATE()。

http://sqlfiddle.com/#!9/3699db3/2


推荐阅读