我有一个表来注册用户日志之间差每隔一分钟和其他活动用的DateTime每个查找总活性小时user_id说明通过计算TIMEDATE记录
这是我的表中的一个样本数据
id | user_id | log_datetime
------------------------------------------
1 | 1 | 2016-09-25 13:01:08
2 | 1 | 2016-09-25 13:04:08
3 | 1 | 2016-09-25 13:07:08
4 | 1 | 2016-09-25 13:10:08
5 | 2 | 2016-09-25 13:11:08
6 | 1 | 2016-09-25 13:13:08
7 | 2 | 2016-09-25 13:13:09
8 | 2 | 2016-09-25 13:14:10
我想计算总活性时间系统上
UPDATE:预期输出
对于实例user_id
1周他的总可用时间应该是0点12分零零秒
因为他的时间和秒是一样的,所以我就减去最后的日志从先前然后上一个从下一个先前等等,那么我会总结所有扣除值 这是一个简单的
只是我想循环通过数据从最后一个记录到第一个记录与我的范围
这是一个简单的公式希望使我的问题明确
SUM((T < N> - T的< N-1>)+(T < N-1> - T的<的n-2> )... +(T < NX> - T的<正第一>))
由于user_id
1他小时和秒相同,则我将计算分钟只。
(13-10)+(10-7)+(7-4)+(4-1)= 12
user_id | total_hours
---------------------------------
1 | 00:12:00
2 | 00:03:02
我这样做代码
SET @start_date = '2016-09-25';
SET @start_time = '13:00:00';
SET @end_date = '2016-09-25';
SET @end_time = '13:15:00';
SELECT
`ul1`.`user_id`, SEC_TO_TIME(SUM(TIME_TO_SEC(`dl1`.`log_datetime`))) AS total_hours
FROM
`users_logs` AS `ul1`
JOIN `users_logs` AS `ul2`
ON `ul1`.`id` = `ul2`.`id`
WHERE
`ul1`.`log_datetime` >= CONCAT(@start_date, ' ', @start_time)
AND
`ul2`.`log_datetime` <= CONCAT(@end_date, ' ', @end_time)
GROUP BY `ul1`.`user_id`
但是这个代码总和所有时间没有得到区别。这是代码
user_id | total_hours
---------------------------------
1 | 65:35:40
2 | 39:38:25
的输出如何计算所有差异日期时间的总和,那么,我想显示他的有效时间的每12小时(00:00:00 - 11: 59:59)和(12:00:00 - 23:59:59)在选定日期时间周期的代码
的开头,以便输出应该是这样的(只是一个虚拟实例而不是从给定的数据)
user_id | total_hours | 00_12_am | 12_00_pm |
-------------------------------------------------------
1 | 10:10:40 | 02:05:20 | 08:05:20 |
2 | 04:10:20 | 01:05:10 | 03:05:30 |
谢谢
你需要获得'TIME_TO_SEC(@start_time)'你的开始时间和减去从你的'TIME_TO_SEC(dl1.log_datetime)'给你13秒:00:00。 TIME_TO_SEC总是从00:00:00开始,这就是为什么你的价值如此膨胀的原因。 –
表中的条目代表什么?登录时间?注销时间?用户使用该系统的第二个阶段?看起来没有任何上下文的时间戳表看起来很奇怪。人们宁愿期望一个时间跨度表,即开始时间和结束时间。或者至少用时间和动作记录('登录'/'注销')。 –
@ R.Chappell实际上,因为我有超过1000条记录,所有用户都在测试特定时间的代码,所以我可以手动计算以查看我的代码是否返回正确的输出。我通常在00:00:00设置'@ start_time',并在23:59:59设置'@ end_time' – ahmadssb