mysql - 在给定应用程序名称和时间戳的mysql中计算在应用程序上花费的时间
问题描述
我有一个存储活动窗口标题和应用程序名称和时间戳的 mysql 表。
我正在尝试编写 sql 查询以了解按 appname 或窗口标题分组的用户花费了多少时间
我对如何实现感到困惑,因为我需要分组并添加时差,直到我点击新的应用程序名称或窗口标题。
请帮助编写 sql 查询以实现我的目标
表的结构。是
1589972898969 | com.apple.Terminal | electron-quick-start
1589972893157 | com.google.Chrome | Stafoverflow.com
的HTML
<table>
<tr><th>timestamp</th><th>appname</th><th>title</th></tr>
<tr>
<td>1589978510857</td>
<td>
FROM_UNIXTIME() Examples – MySQL | Database.Guide</td><td>com.apple.Terminal</td>
</tr>
<tr>
<td>1589978507916</td>
<td>
FROM_UNIXTIME() Examples – MySQL | Database.Guide</td><td>com.apple.Terminal</td>
</tr>
<tr>
<td>1589978501832</td>
<td>
FROM_UNIXTIME() Examples – MySQL | Database.Guide</td><td>com.apple.Terminal</td>
</tr>
<tr>
<td>1589979493016</td>
<td>
Calculating time spent on an app in mysql given name of the app and timestamp - Stack Overflow </td><td>com.google.Chrome</td>
</tr>
</table>
解决方案
你可以这样做:
SELECT *, MAX(time), MIN(time), MAX(time) - MIN(time) time_diff FROM (
SELECT @c := @c + (@appname != appname) AS cn,
@appname := appname AS an,
t.*
FROM (
SELECT @c := 0,
@appname := 0
) vars,
test t
ORDER BY `time` ASC
) sorted GROUP BY cn
要测试的表:
CREATE TABLE `test` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`time` timestamp NULL DEFAULT NULL,
`appname` varchar(50) DEFAULT NULL,
`title` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO `test` (`id`, `time`, `appname`, `title`)
VALUES
(1,'2020-05-20 13:14:38','test','jhkjgh'),
(2,'2020-05-20 13:15:11','test','skdljbhj'),
(3,'2020-05-20 13:18:11','test',NULL),
(4,'2020-05-20 14:24:38','test2','jhkjgh'),
(5,'2020-05-20 14:55:31','test1','skdljbhj'),
(6,'2020-05-20 15:38:11','test1',NULL),
(7,'2020-05-20 18:24:38','test2','jhkjgh'),
(8,'2020-06-20 09:55:31','test2','skdljbhj'),
(9,'2020-05-10 05:38:11','test2',NULL);
我用时间戳做到了,你可以改变它。您也可以添加您喜欢的任何分组。
推荐阅读
- firebase - FireStore 文档如何在子集合中读取计算
- c# - Xamarin.Forms Android 将图像保存到设备库时获得访问被拒绝异常而未在设备中启用存储权限
- dart - Dart 编程语言中的自定义异常
- vuejs3 - 升级到 VueJs3 、 Vuex4 、 VueCli4.5 、 VueRouter4 后运行 vue 项目出现问题
- javascript - 如何在按钮单击时更改图表 js 数据
- swift - 错误 ITMS-90085:“二进制文件中没有架构
- gnome - 如何在 gjs 中使用“lang”?
- python - 如何将 python 多处理队列和进程与非常庞大的生成器一起使用?
- kubernetes - 如何防止重复的协调调用
- r - [[base R]] 添加T/F列是否为每组的最小值