我有一张名为userActivity
的表格,其中记录了每个活动期间。如何在MySQL中计算明智的可用时间?
这里的表结构:
表:userActivity
ID user_id start_time end_time
当用户进入在线start time
被记录下来,只要在线状态改变时,end time
被记录在相应的行。
现在我要生成一个报告,显示用户每天的可用时间。
样品输入:
ID user_id start_time end_time
'1' '1' '2016-02-28 10:00:00' '2016-02-28 19:00:00'
'2' '1' '2016-02-28 22:00:00' '2016-02-29 10:00:00'
'3' '1' '2016-03-02 10:00:00' '2016-03-02 19:00:00'
'4' '1' '2016-03-02 22:00:00' '2016-03-06 19:00:00'
预期输出:
Date AvailableTime(Hours)
2016-02-28 11
2016-02-29 10
2016-03-02 11
2016-03-03 24
2016-03-04 24
2016-03-05 24
2016-03-06 19
到目前为止,我已经试过:
SELECT
DATE_FORMAT(start_time,"%Y-%m-%d") `date`,
TIMESTAMPDIFF(HOUR,start_time,end_time) availableTime
FROM useractivity
GROUP BY `date`
得到输出:
Date availableTime(Hours)
2016-02-28 9
2016-03-02 9
这里的SQL FIDDLE
注: 请忽略user_id
暂且。我可以在应用程序级别解决它,但我想在MySQL
中处理它。
的时间间隔就可以开始一天,并结束超过一天后
总之,的可用时间是刚好在天轴上的投影(从开始时间和结束时间)。如果开始时间没有投影到结束时间的同一天,则开始时间将被视为结束时间投影到的特定日期的开始时间。
描绘图:
所以可用的时间会从这张截图如下计算:
28 Feb = (t2-t1) + (t4- t3)
29 Feb = (t5 - t4)
02 Mar = (t7 - t6)
你得到的印象分增加一个小提琴,但它不会使你的问题更清楚。 –
时间间隔是否可以在一天后开始并在一天后结束? (即开始16:th,结束22:nd? –
是的这种情况是可能的。@JoachimIsaksson –