2011-01-06 8 views
0

Ich habe zwei Tabellen:Letzter Login Verbinden von zwei Tabellen

members (
    userid int primary key 
) 

login_history (
    userid int, 
    login datetime 
) 

Ein Eintrag Tabelle login_history wird jedes Mal ein Benutzer anmeldet gemacht

Ich versuche, eine Abfrage zu schreiben, alle Benutzer zu finden. letzte Login-Zeit dh. Der MAX (Login) oder gibt null zurück, wenn der Benutzer keinen Login-Verlauf hat. Was ist die beste SQL, um dies zu erreichen? Dank

Antwort

1
SELECT m.userid, MAX(l.login) 
    FROM members m LEFT OUTER JOIN login_history l 
    ON m.userid = l.userid GROUP BY m.userid 
+0

dies hat auch funktioniert. – Yada

+0

@Yada, soweit ich das beurteilen kann, ist es der Einzige, der bisher gepostet wurde. –

+0

Danke. Müssen Sie diesen Ausschnitt in der Speicherbank behalten. – Yada

3

versuchen, diese

select nvl((max(login_history.login)),NULL), login_history.userid 
from login_history, outer members 
where login_history.userid = members.userid 
group by login_history.userid 
+0

'nvl' →' COALESCE', keinen Grund, nicht die Standardfunktion zu verwenden. Mit einem zweiten Argument der Null, können Sie es nicht einfach ganz weglassen? – derobert

+0

@derobert - ich dachte, sie waren beide Standard? – CheeseConQueso

+1

@CheeseConQueso: nvl ist eine Oracle-Erweiterung. Siehe auch http://stackoverflow.com/questions/950084/oracle-differences-between-nvl-and-coalesce – derobert

Verwandte Themen