选择要计算平均值的特定MySQL行出现次数

选择要计算平均值的特定MySQL行出现次数,mysql,sql,Mysql,Sql,我们有一个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

我们有一个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第一次出现在表中时,即用户第一次会话;我们将所有这些首次出现的会话时间相加,然后除以计数。然后对第二次出现的userid执行相同的操作,并获得平均时间,等等

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

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

SessionCount    AvgTime (seconds)
1               540
2               810
3               326
我希望这是有道理的。任何建议都将不胜感激!谢谢

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

请参阅。

请不要在多个网站上交叉发布问题。这已发布在DBA.SE上-请选择一个站点发布您的问题。为了清楚起见,您需要所有用户的特定会话索引的平均时间。。。使用行号或相关函数将更容易实现这一点。如果用户拥有并发会话,那么应该怎么办。。。?还是应该严格按照开始?BlueFoots我们能把它从DBA.SE移到这里合并吗?bonCodigo OP必须在DBA上标记它,并请求mod移动它。我删除了其他帖子道歉。