mysql - 我将如何更新此 MySQL 查询以获取从开始、停止、暂停和恢复事件的总经过时间
问题描述
我有这个查询,我可以通过搜索 SOF 创建。
SELECT
start_log.reportID,
start_log.userID,
start_log.testID,
MAX(start_log.eventDateTime) AS start_time,
end_log.eventDateTime AS end_time,
TIMESTAMPDIFF(MINUTE, MAX(start_log.eventDateTime), end_log.eventDateTime) AS diff
FROM
testtracker_event AS start_log
INNER JOIN
testtracker_event AS end_log ON (
start_log.userID = end_log.userID
AND
start_log.reportID = end_log.reportID
AND
start_log.testID = end_log.testID
AND
end_log.eventDateTime > start_log.eventDateTime)
WHERE start_log.eventType = 'start'
AND end_log.eventType = 'finish'
AND start_log.testID = 2
AND start_log.userID = '$user'
GROUP BY
start_log.userID,
start_log.testID,
start_log.eventDateTime,
start_log.reportID
ORDER BY
-- userID DESC,
start_time DESC
按预期工作,查询返回与列的start_time
时间end_time
差diff
。我现在想扩展此查询以考虑暂停和恢复事件我只是无法理解如何将这些与当前查询考虑在内。我可以看到扩展选择以解释暂停和恢复列pause_time
,resume_time
除了我将如何解释可能有多个暂停和恢复事件的情况?我还冒昧地猜测我可能需要做一些额外的计算才能得到实际经过的时间,但我也不知道我会如何引用这些。
任何帮助将非常感激。
样本数据
reportID|testID|eventDateTime |eventType
--------|------|-------------------|----------
11881 | 2 |2013-08-16 14:19:09|start
11910 | 2 |2013-08-16 14:48:04|start
11910 | 2 |2013-08-16 14:55:08|finish
11891 | 2 |2013-08-16 15:01:01|start
11891 | 2 |2013-08-16 15:25:42|finish
11888 | 2 |2013-08-16 16:20:27|start
11888 | 2 |2013-08-16 16:51:16|finish
11889 | 2 |2013-08-19 09:00:13|start
11889 | 2 |2013-08-19 10:31:17|finish
11905 | 2 |2013-08-19 12:10:00|start
11898 | 2 |2013-08-19 12:12:02|start
11898 | 2 |2013-08-19 12:19:28|finish
11905 | 2 |2013-08-19 12:27:21|finish
11880 | 2 |2013-08-19 16:40:26|start
11880 | 2 |2013-08-19 16:40:27|finish
11895 | 2 |2013-08-19 16:42:58|start
11895 | 2 |2013-08-19 16:55:14|finish
11908 | 2 |2013-08-20 09:46:11|start
11908 | 2 |2013-08-20 09:56:20|finish
11862 | 2 |2013-08-20 10:20:11|start
11862 | 2 |2013-08-20 10:29:44|finish
11911 | 2 |2013-08-20 11:31:33|start
11911 | 2 |2013-08-20 11:59:15|finish
11913 | 2 |2013-08-20 12:44:07|start
11913 | 2 |2013-08-20 13:32:52|finish
11928 | 2 |2013-08-20 14:28:38|start
11928 | 2 |2013-08-20 14:40:00|finish
11836 | 2 |2013-08-20 16:26:03|start
11887 | 2 |2013-08-20 16:30:36|start
11836 | 2 |2013-08-20 16:43:53|finish
11887 | 2 |2013-08-20 16:58:44|pause
11902 | 2 |2013-08-22 14:51:53|start
11902 | 2 |2013-08-22 15:01:05|finish
11912 | 2 |2013-08-22 15:01:43|start
11912 | 2 |2013-08-22 15:12:21|finish
11930 | 2 |2013-08-22 16:09:22|start
11814 | 2 |2013-08-14 10:39:07|finish
11930 | 2 |2013-08-23 09:55:14|finish
11914 | 2 |2013-08-26 14:55:04|start
11914 | 2 |2013-08-26 15:19:48|pause
11940 | 2 |2013-08-27 07:44:12|start
11940 | 2 |2013-08-27 07:55:52|finish
11914 | 2 |2013-08-27 09:13:28|resume
11914 | 2 |2013-08-27 09:13:44|pause
11914 | 2 |2013-08-27 09:15:56|resume
11914 | 2 |2013-08-27 09:30:12|finish
从样本中删除 userId 列以保护身份。
不是预期的结果reportID - 11914
reportID|testID|start|end|diff
--------|------|-----|---|-----
11914 | 2 |2013-08-26 14:55:04|2013-08-27 09:30:12|1115
预期结果reportID - 11902
reportID|testID|start|end|diff
--------|------|-----|---|-----
11902 | 2 | 2013-09-10 14:26:53 | 2013-09-10 14:45:36 | 18
解决方案
推荐阅读
- java - Android Text to Speech相对于时间的控制率
- angular - Angular和localStorage如何获得一个唯一的密钥
- flutter - 从 SingleChildScrollView 垂直滚动 PageView
- powerapps - 使用 PowerApps ForAll + Patch 更新 Excel 表的所有行
- r - 如何使用 dbplyr 和 dplyr 构建用于查询数据库的包装函数,使查询有所不同
- reactjs - 当整个应用程序在 React js 中崩溃时如何隐藏错误信息
- azure - 使用 Azure Function 在 CosmosDB 表中读取 changefeed
- azure-application-insights - 从 Azure cli 创建 Insights Log 查询而不是 Log Monitor 保存的搜索
- javascript - 如何制作一个删除用createElement创建的元素的按钮?
- flutter - 热重载不适用于 Flutter(VS Code)