我如何获得mysql中时间戳的总持续时间?

时间:2021-04-30 18:15:11

标签: mysql time

我有一个表格,它给出了用户使用什么工具进行的扫描的时间戳。列是 scan_timelogin_name。该表只给出了扫描发生时间的时间戳,因此将用户进行的第一次扫描视为开始时间,将最后一次扫描视为结束时间,如何获得用户扫描之间的总持续时间?< /p>

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     |  

1 个答案:

答案 0 :(得分:0)

试试这个。按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))

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

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