2017-05-03 102 views
3

表爲users,列爲user_id,firstname,lastname,area僅列出唯一用戶

另一張表是user_sessions,列是user_id,logon, logoff

,看看誰是登錄我用

select u.FIRSTNAME, u.LASTNAME, u.PHONE_ID, us.LOGON 
from USERS u 
    join USER_sessions us on u.USER_ID=us.user_id 
where cast (us.LOGON as date) = date 'now' 
and us.LOGOFF is null 
order by u.FIRSTNAME 

的結果是正確的,但有時我得到重複的條目。

例如,相同的firstnamelastname,但登錄不同。我只想看最新的登錄。

+0

「LOGON」的數據類型是什麼? –

回答

2

它看起來像字段LOGON是一種時間戳類型字段;你的問題不是很確切,那裏。

所以,我認爲,你想要的最大值LOGON。爲此,有一個合計功能MAX()必須與GROUP BY一起使用。

select u.FIRSTNAME, u.LASTNAME, u.PHONE_ID, MAX(us.LOGON) 
    from USERS u 
    join USER_sessions us 
    on u.USER_ID = us.user_id 
    where cast (us.LOGON as date) = date 'now' 
    and us.LOGOFF is null 
    group by u.FIRSTNAME, u.LASTNAME, u.PHONE_ID 
    order by u.FIRSTNAME 

你會得到的最新LOGONu.FIRSTNAME, u.LASTNAME, u.PHONE_ID每一次出現。

請注意,您可以使用current_date上下文變量而不是date 'now'強制轉換。

+0

是登錄是時間戳 –

+0

@LeoFazzi如果我的答案確實符合您的需求,您可以通過單擊左側的複選標記將其標記爲已接受。 –

+0

謝謝你Rene'。我想知道是否可以在總結底線。可能聯盟並運行計數?從來沒有嘗試過... –