2011-01-06 9 views
0

J'ai deux tables:Dernière connexion joignant deux tables

members (
    userid int primary key 
) 

login_history (
    userid int, 
    login datetime 
) 

Une entrée à login_history table est faite à chaque fois qu'un utilisateur se connecte à

Je suis en train d'écrire une requête pour trouver tous les utilisateurs. dernière heure de connexion. c'est à dire. Le MAX (login) ou renvoie null si l'utilisateur n'a pas d'historique de connexion. Quel est le meilleur SQL pour accomplir cela? grâce

Répondre

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

cela a fonctionné aussi. – Yada

+0

@Yada, pour autant que je sache, c'est le seul posté jusqu'ici qui fonctionnera. –

+0

Merci. Besoin de garder cet extrait dans la banque de mémoire. – Yada

3

essayer cette

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', aucune raison de ne pas utiliser la fonction standard. En fait, avec un second argument de null, ne pouvez-vous pas l'omettre complètement? – derobert

+0

@derobert - je pensais qu'ils étaient à la fois standard? – CheeseConQueso

+1

@CheeseConQueso: nvl est une extension Oracle. Voir aussi http://stackoverflow.com/questions/950084/oracle-differences-between-nvl-and-coalesce – derobert

Questions connexes