我有一個應用程序記錄登錄和註銷datetimestamps到mysql數據庫。每個用戶登錄和註銷都是一行。我需要創建一個報告,以小時和分鐘顯示每個用戶登錄的分鐘數。我可以通過在兩個時間戳之間使用TIMESTAMPDIFF,然後按小時在其中一個時間戳上進行分組來找出如何執行此操作。但我不知道如何在登錄時間爲11:53時登出,登出時間爲13:06。在哪裏應該顯示11分鐘7分鐘,12分鐘60分鐘,13分鐘6分鐘。相反,我現在的做法是在第11小時顯示73分鐘(如果按登錄時間分組)。Mysql - 獲取每小時的分鐘數,當開始和結束時間在不同的小時
回答
如果您創建的另一個表格只需要將所有小時數作爲時間戳報告,那麼最簡單。之所以這樣說,表是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
太棒了!謝謝!這接近工作。但是,我需要得到總計的會議記錄,而且似乎沒有彙總。當我添加一個羣組時,我只是獲得第一個登錄結果,而不是它在該小時內彙總該用戶的所有登錄分鐘。任何想法對我來說? – RThomas1 2014-08-28 17:03:15
你的意思是什麼?此查詢應爲您在該小時內爲該用戶提供小時,用戶和分鐘數(以timediff表示) - 您不需要按 – antlersoft 2014-08-28 18:08:16
排序的其他小組糟糕,我按照上述順序進行了分組。謝謝! – RThomas1 2014-09-02 17:12:44
- 1. 計算開始時間和結束時間之間的每小時數
- 2. 獲取30分鐘開始和結束時間之間的時間間隔的數據在MySQL
- 3. 在mysql中以1小時爲間隔的開始時間和結束時間之間的分隔時間
- 4. 開始和結束時間,分爲1小時段
- 5. 計算開始和結束時間的分鐘數
- 6. 從開始時間和持續時間獲取結束時間
- 7. 如何從日期時間字段獲取開始小時數和結束小時數SQLServer
- 8. 獲取視頻的開始時間和結束時間
- 9. 獲取的開始時間和結束時間
- 10. C獲取循環中的開始時間和結束時間
- 11. 的iOS獲取時間戳沒有小時和分鐘和秒
- 12. 時間conversioin小時和分鐘整數
- 13. 比較開始「時間」小於JavaScript中的結束「時間」
- 14. 給定開始時間,結束時間和秒數。在特定小時內獲取秒數
- 15. 如何獲取每個過程的開始時間和結束時間?
- 16. 選擇語句小時開始和結束時間
- 17. 在PHP中獲取小時和分鐘
- 18. 開始時間和結束時間之間的倒數時間
- 19. 獲取小時和分鐘的日期時間
- 20. 使用chrono :: time_point獲取當前的小時數和分鐘數
- 21. 拆分時間由小時和分鐘
- 22. 如何在MySQL中獲取當前小時的開始Unix時間戳?
- 23. MySQL的 - 獲取時間以分鐘爲時間值超過一個小時
- 24. 我的時間在開始時間和結束時間之間
- 25. Matplotlib:每15分鐘開始一次,從小時開始
- 26. MySQL日期時間在天,小時和分鐘上的差異
- 27. 開始和結束時間 - 每小時/天/周等多少個併發事件
- 28. PHP兩小時之間的小時數和分鐘
- 29. Fullcalendar按當前時間的時間設置開始小時數
- 30. 計算從開始和結束時間導出的每分鐘會話
這種類型的東西很難在SQL,它很可能是很容易做的客戶端應用語言。 – Barmar 2014-08-27 16:56:00
如果登錄和註銷可以跨越午夜邊界,則會變得更加複雜,因此登錄名爲'23:50',註銷爲'01:15'。 – Barmar 2014-08-27 16:57:33