次のクエリは、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年1月1日午前9時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
:これについて
のための1つのレコードのみが存在することを意味しますが、この表の自動インクリメントの主キーを持っていますか? – zerkms
@zerkms、いいえ、auto_incrementではありません。私は主キーのセッションハッシュを使用しています。 – Muzz