2014-08-27 88 views
-1

我有一個應用程序記錄登錄和註銷datetimestamps到mysql數據庫。每個用戶登錄和註銷都是一行。我需要創建一個報告,以小時和分鐘顯示每個用戶登錄的分鐘數。我可以通過在兩個時間戳之間使用TIMESTAMPDIFF,然後按小時在其中一個時間戳上進行分組來找出如何執行此操作。但我不知道如何在登錄時間爲11:53時登出,登出時間爲13:06。在哪裏應該顯示11分鐘7分鐘,12分鐘60分鐘,13分鐘6分鐘。相反,我現在的做法是在第11小時顯示73分鐘(如果按登錄時間分組)。Mysql - 獲取每小時的分鐘數,當開始和結束時間在不同的小時

+1

這種類型的東西很難在SQL,它很可能是很容易做的客戶端應用語言。 – Barmar 2014-08-27 16:56:00

+0

如果登錄和註銷可以跨越午夜邊界,則會變得更加複雜,因此登錄名爲'23:50',註銷爲'01:15'。 – Barmar 2014-08-27 16:57:33

回答

0

如果您創建的另一個表格只需要將所有小時數作爲時間戳報告,那麼最簡單。之所以這樣說,表是hourlist和其中的時間戳列是小時

那麼你一定要這樣的查詢:

select hour, userid, 
    case 
     when login < hour and logout >= ADDTIME(hour,'1:00:00.0') then '1:00:00.0' 
     when login >= hour and logout < ADDTIME(hour, '1:00:00.0')then TIMEDIFF(logout, login) 
     when login >= hour and logout > ADDTIME(hour, '1:00:00.0') then TIMEDIFF(ADDTIME(hour, '1:00:00.0'), login) 
     when login < hour and logout < ADDTIME(hour, '1:00:00.0') then TIMEDIFF(logout, hour) 
     else '00:00:00.0' 
    end case 
from hourlist join loginlogout 
on (login >= hour and login < ADDTIME(hour,'1:00:00.0')) or (logout >= hour 
    and logout < ADDTIME(hour,ADDTIME(hour,'1:00:00.0')) 
order by hour 
+0

太棒了!謝謝!這接近工作。但是,我需要得到總計的會議記錄,而且似乎沒有彙總。當我添加一個羣組時,我只是獲得第一個登錄結果,而不是它在該小時內彙總該用戶的所有登錄分鐘。任何想法對我來說? – RThomas1 2014-08-28 17:03:15

+0

你的意思是什麼?此查詢應爲您在該小時內爲該用戶提供小時,用戶和分鐘數(以timediff表示) - 您不需要按 – antlersoft 2014-08-28 18:08:16

+0

排序的其他小組糟糕,我按照上述順序進行了分組。謝謝! – RThomas1 2014-09-02 17:12:44

相關問題