2012-06-22 86 views
0

我有一个表有两列时间和登录,显示当用户在一天内先后派出呼叫。MySQL的:每记录分组结果每

在每个用户的基础上,我需要找到会话长度作为第一个呼叫,在任意一天的最后一次通话之间分钟的时间来计算的最大,最小和平均会话时长。

表:

Time    Login 
2012-05-29 20:01:26 A 
2012-05-29 20:01:40 A 
2012-05-29 20:02:27 A 
2012-05-29 20:58:46 A 
2012-05-29 20:59:50 A 
2012-05-29 21:00:12 A 
2012-05-29 21:00:36 A 
2012-05-30 21:28:28 A 
2012-05-30 21:29:08 A 
2012-05-30 21:29:13 A 
2012-05-30 21:29:25 A 
2012-04-06 10:25:24 A 
2012-04-06 10:25:53 A 
2012-04-06 10:26:35 A 
2012-04-27 12:05:45 A 
2012-04-27 12:06:06 A 

所需的输出会是这个样子:

MaxSession Login 
59   A 

由于相同的输出上面提到的需要MinSession和AverageSession。

我完全被卡住几个小时,真的有不知道如何完成这件事。

我已经取得了什么是让独特的活跃天数每登录。 我只是无法弄清楚如何实现下一个步骤,不过,这将是:

  • 得到每登录每天的第一项
  • 得到每登录每天
  • 计算差值中的最后一项在最后一项 和SessionLength每天第一个条目每次登录分钟之间
  • 选择最大值,最小值,以及每登录平均SessionLenght

我禾非常感谢任何形式的帮助!

+0

OK我已经想通了如何让每个登录每天的第一项: '选择 时间, 日期(时间)为ActiveDay, 登录 GROUP BY登录,ActiveDay 有时间=最小值(时间); ' 但是它不与最大的如此比我在这一个多快的工作... – Nospez

回答

2

试试这个

白天分组

Select Login,Date(Time) As LoginDay,Max(Time) As LastLogin,Min(Time) As FirstLogin,Count(*) As Logins, 

From LoginsTable 
Group By Login,Date(Time) 
Order By LoginDay,Login 

请附上在 '列' 像列 '时间'

最大,最小和平均会话

Select Login,Max(SessionMinutes) As MaxSessoin,Min(SessionMinutes) As MinSession, 
    Avg(SessionMinutes) From 
    (
     Select Login, 
     LoginDay,LastLogin,FirstLogin,TotalLogins,Hour(DateDiff(LasTLogin-FirsTLogin))*60 + Minute(DateDiff(LasTLogin-FirsTLogin)) As SessionMinutes 
     From 
     (
      Select Login,Date(Time) As LoginDay,Max(Time) As LastLogin,Min(Time) As FirstLogin,Count(*) As Logins, 
      From LoginsTable 
      Group By Login,Date(Time) 
     ) As Temp 
    ) As Temp1 

计算分钟时,目前忽略了秒数。

+0

+1;) –

+0

@OlivierCoilland感谢 –

+0

非常感谢! @Sudhakar然而,这不是对每个登录的基础是什么呢?我应该更清楚地表明该表包含许多不同的登录信息。 – Nospez