Mysql - 当开始和结束时间在不同的小时内时,获得每小时的分钟数

时间:2014-08-27 16:52:39

标签: mysql

我有一个应用程序,它将登录和注销datetimestamps记录到mysql数据库中。每个用户登录和注销都是一行。我需要创建一个报告,按用户和小时显示每个用户登录的分钟数。我可以通过在两个时间戳之间使用TIMESTAMPDIFF然后在其中一个时间戳上按小时分组来弄清楚如何执行此操作。但是当登录可能是11:53并且注销可能是13:06时,我不知道该怎么做。第11小时应该显示7分钟,第12小时显示60分钟,第13小时显示6分钟。相反,我现在这样做的方式将在第11小时显示73分钟(如果我按登录时间分组)。

1 个答案:

答案 0 :(得分:0)

如果您创建另一个表,其中包含您可能需要报告的所有小时数作为时间戳,则最容易做到这一点。假设此表是小时表,其中的时间戳列是小时

然后你想要一个像这样的查询:

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