mysql - 我如何获得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 |
解决方案
尝试这个。按 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()。
推荐阅读
- azure - Allowing multiple IPs under Azure SAS
- ios - 如果我有免费的 iOS 开发人员配置文件,如何调试“推送通知”?
- spring - 使用 spring-integration 5.1.3.RELEASE 时过滤器上的 MessageHandlingException
- javascript - onCall firebase 函数出现“超出最大调用堆栈大小”错误
- regex - Bash 将两条特定的行合并为一条
- c++ - Why does my interrupt get called, but won't enter the handler?
- reporting-services - 如何在 RDLC 报告的每一页上显示页眉?
- python - 需要类“numpy.int32”,但 type() 函数仅显示:numpy.ndarray
- python - Django Forms - Is 'readonly' safe to use?
- http - What is the difference between THTTPClient and TNetHTTPClient?