以下查询显示基于userId的登录信息。如果用户在未注销或会话过期的情况下关闭浏览器,则logoff_date将保持为null,如下例所示。
userId logon_date logoff_date
1 2012-01-01 10:00:00 2012-01-01 12:00:00
1 2012-01-01 09:00:00 NULL
因为2012-01-01 10:00:00有较新 logon_date,我知道用户必须已经杀死了2012-01-01 09:00的login_date会话:00
这是我的问题:
SELECT userId, logon_date, logoff_date
FROM user_logon
WHERE user_id = 2
我想要的只是计算活动会话。为了做到这一点,如果有一个具有相同userId的较新行,我需要跳过缺少logoff_date的行。
答案 0 :(得分:0)
这个怎么样:
SELECT l.*
FROM user_logon l
INNER JOIN (SELECT MAX(logon_date) mdate,
user_id
FROM user_logon
GROUP BY user_id) x ON x.user_id = l.user_id
AND l.logon_date = x.mdate
WHERE l.logoff_date IS NULL
PS:此查询暗示对于每个日期,只有一个特定用户的记录