2014-08-27 95 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

相关问题