上一行取决于当前行的值
问题描述:
以下查询显示基于userId的登录信息。如果用户关闭浏览器而未注销或会话过期,则logoff_date将保持为空,如下例所示。上一行取决于当前行的值
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
因为有新 logon_date的2012-01-01 10:00:00,我知道,用户必须杀了会议,以便2012-01-01 09:00 login_date: 00。
这里是我的查询:
SELECT userId, logon_date, logoff_date
FROM user_logon
WHERE user_id = 2
我想是只计算活动会话。为了做到这一点,如果存在具有相同userId的新行,我需要跳过缺少logoff_date的行。
答
如何:
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:此查询意味着每个日期只有特定用户的一条记录
您在此表中是否有自动递增主键? – zerkms 2012-01-09 03:59:02
@zerkms,不,它不是auto_increment。我正在使用主键的会话散列。 – Muzz 2012-01-09 04:00:42