我有一張名爲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 –