如何计算MySQL中登录实例的平均会话持续时间?

如何计算MySQL中登录实例的平均会话持续时间?,mysql,Mysql,我有两张桌子 使用者 用户会话日志 我想计算按登录实例第一次登录、第二次登录等分层的会话持续时间分布。 根据上面的数据,我想得到 结果 你知道如何在mysql查询中实现这一点吗?试试下面的查询 select us.id, usl.id, usl.user_id, DATEDIFF(HOUR,usl.start_timestamp ,usl.start_timestamp) from user as us ,user_sessions_log as usl

我有两张桌子

使用者

用户会话日志

我想计算按登录实例第一次登录、第二次登录等分层的会话持续时间分布。 根据上面的数据,我想得到

结果


你知道如何在mysql查询中实现这一点吗?

试试下面的查询

select 
    us.id,  
    usl.id, 
    usl.user_id, 
    DATEDIFF(HOUR,usl.start_timestamp ,usl.start_timestamp)
from user as us ,user_sessions_log as usl
where us.id=usl.id
Group By us.id;

这可以通过使用子选择来计数登录实例,方法是计数以前的条目数,即,对于相同的用户id,使用较少的用户\u会话\u日志id:

SELECT login_instance, AVG(session_duration_minutes) AS average_session_duration_minutes
FROM
(SELECT *,
        (SELECT COUNT(*)
         FROM user_session_logs usl2
         WHERE usl2.user_id = usl.user_id AND usl2.id <= usl.id) AS login_instance,
        TIMESTAMPDIFF(MINUTE, start_timestamp, end_timestamp) AS session_duration_minutes
 FROM user_session_logs usl) subq
GROUP BY login_instance;

请参阅此处的演示:

谢谢,但我不想要每个用户的值,我要查找每个登录实例的平均值,如我的示例数据中所示。这样您就不必执行加入查询了吗?登录\实例值将来自哪个字段?
login_instance    average_session_duration_minutes
-------------------------------------------------------------
1                   60 (this is the average of all user's 1st session duration)
2                   45 (this is the average of all user's 2nd session duration)
3                   90 (this is the average of all user's 3rd session duration)
select 
    us.id,  
    usl.id, 
    usl.user_id, 
    DATEDIFF(HOUR,usl.start_timestamp ,usl.start_timestamp)
from user as us ,user_sessions_log as usl
where us.id=usl.id
Group By us.id;
SELECT login_instance, AVG(session_duration_minutes) AS average_session_duration_minutes
FROM
(SELECT *,
        (SELECT COUNT(*)
         FROM user_session_logs usl2
         WHERE usl2.user_id = usl.user_id AND usl2.id <= usl.id) AS login_instance,
        TIMESTAMPDIFF(MINUTE, start_timestamp, end_timestamp) AS session_duration_minutes
 FROM user_session_logs usl) subq
GROUP BY login_instance;