我有一个表格,它给出了用户使用什么工具进行的扫描的时间戳。列是 scan_time
、login_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 |
答案 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()。