MySQL:每天每条记录的分组结果

时间:2012-06-22 13:13:12

标签: mysql join group-by average

我有一个包含两列时间和登录的表格,显示用户在一天内拨打电话的时间。

在每个用户的基础上,我需要找到最大,最小和平均会话长度,其中会话长度计算为在任何给定日的第一个呼叫和最后一个呼叫之间的分钟时间。

表:

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

我会非常感谢任何类型的帮助!

1 个答案:

答案 0 :(得分: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

请将''列中的列包含在'time'

列中

最多,最小和平均会话

    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

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