0

我们有一个 MySQL 表,其中包含跟踪用户会话开始和结束时间:

UserId      Start                   End
150392  2012-07-11 01:11:28 2012-07-11 01:17:36
150392  2012-07-11 01:19:03 2012-07-11 01:23:47
150393  2012-07-11 01:22:47 2012-07-11 01:38:15
150051  2012-07-11 01:31:03 2012-07-11 01:36:07
150393  2012-07-11 01:37:43 2012-07-11 01:56:41
150392  2012-07-11 01:48:57 2012-07-11 01:54:23

我希望能够根据用户进入我们系统的次数来检索平均会话时间。澄清一下,我想知道用户第一次进入我们系统的平均会话时间,第二次进入我们系统的平均会话时间,等等。所以用户ID第一次出现在表格中时,就是用户第一次会议;我们将所有第一次出现的会话时间相加并除以计数。然后对第二次用户 ID 事件执行相同操作并获取平均时间等。

以上表为例,第三次会话的平均时间为 326 秒,因为只有一个用户有第三次会话(用户 ID 150392,最后一行)。

所以我正在寻找这样的输出:

SessionCount    AvgTime (seconds)
1               540
2               810
3               326

我希望这是有道理的。任何建议将不胜感激!谢谢。

4

1 回答 1

1
SELECT SessionCount, AVG(duration) AS AvgTime FROM (
  SELECT   COUNT(*) AS SessionCount,
           TIMESTAMPDIFF(SECOND, t2.Start, t2.End) AS duration
  FROM     my_table t1
      JOIN my_table t2
        ON t1.UserId = t2.UserId AND t1.Start <= t2.Start
  GROUP BY t2.UserId, t2.Start, t2.End
) t GROUP BY SessionCount

See it on sqlfiddle.

于 2012-12-21T22:57:09.783 回答