我们有一个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我希望能够根据用户进入我们的系统的次数来检索平均会话次数。为了澄清,我想知道用户第一次进入系统时的平均会话时间,系统中第二次的平均会话时间等等。因此,当用户I第一次出现在表中时,即用户第一次会话;我们将所有这些第一次出现的会话时间相加,除以计数。然后,对第二次用户标识事件执行相同的操作,并获得平均时间等。
以上面的表为例,第三次会话的平均时间为326秒,因为只有一个用户有第三次会话(userID 150392,最后一行)。
所以我在寻找这样的输出:
SessionCount AvgTime (seconds)
1 540
2 810
3 326我希望这是有意义的。任何建议都将不胜感激!谢谢。
发布于 2012-12-21 22:57:09
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请在木琴上看到。
https://stackoverflow.com/questions/13997988
复制相似问题