2012-01-09 46 views
0

以下查詢顯示基於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的行。

+0

您在此表中是否有自動遞增主鍵? – zerkms 2012-01-09 03:59:02

+0

@zerkms,不,它不是auto_increment。我正在使用主鍵的會話散列。 – Muzz 2012-01-09 04:00:42

回答

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:此查詢意味着每個日期只有特定用戶的一條記錄

+0

Serk,謝謝...讓我試試這個,我會讓你知道這是如何解決的。 brb – Muzz 2012-01-09 04:04:37

+0

Zerk,我從這個查詢中找不到任何行。我剛剛看到您的編輯,並且此表包含所有登錄信息,因此每個用戶將有多行記錄。 – Muzz 2012-01-09 04:09:45

+0

@Mr。溢出:呃,我不相信,它應該工作。內部查詢返回什麼? – zerkms 2012-01-09 04:10:28