2010-08-13 8 views
0
 
id login_name login_time 
1 aa  2002-09-19 
2 bb  2002-12-19 
3 bb  2002-12-30 

Comment puis-je écrire une instruction SQL pour trouver la dernière login_time pour l'utilisateur qui a le nombre maximum de connexions. Par exemple, dans cet exemple de données, l'utilisateur "bb" s'est connecté deux fois et son dernier login_time est "2002-12-30".comment écrire cette déclaration SQL?

+0

Que voulez-vous dire par « temps de connexion maximale »? – BoltClock

+2

Quelle variante SQL? Les réponses seront différentes pour mysql, t-sql, etc –

+0

Nombre maximum de connexions peut-être? –

Répondre

-1
select * 
from [login table] 
where login_name [has max] on login_time [is soonest] 
+1

Ce n'est pas une instruction SQL valide, c'est juste pseudo-code –

2
 

SELECT 

id, 
MAX(`login_time`) AS `login_time` 

FROM table_name 

GROUP BY login_name 

Est-ce ce que vous voulez ?? pouvez-vous expliquer un peu plus sinon ..

+0

cette réponse est fausse. J'ai testé, désolé. – SunLiWei

0
SELECT login_name, COUNT(*) as num_logins, max(login_time) as last_login_time 
FROM table_name ORDER BY num_logins DESC 

Ensuite, dépend serveur SQL que vous utilisez, vous pouvez ajouter limit 1 (en cas de MySQL), ou top 1 pour MS SQL Server, ou autre chose pour un serveur différent pour obtenir le premier enregistrement seulement.

+0

cette réponse est fausse, désolé. – SunLiWei

+2

Peut-être devriez-vous développer ce qui ne va pas pour que l'affiche et les autres puissent avoir une meilleure idée de ce que vous cherchez à obtenir. –

+1

@ alex07 - Je pense que vous voulez un 'GROUP BY login_name' là-dedans. –

0

Les travaux suivants sur une base de données Oracle:

SELECT MAX(LOGIN_TIME) 
    FROM LOGIN_TABLE 
    WHERE LOGIN_NAME = (SELECT LOGIN_NAME 
         FROM (SELECT LOGIN_NAME, COUNT(*) AS LOGIN_COUNT 
           FROM LOGIN_TABLE 
           GROUP BY LOGIN_NAME 
           ORDER BY LOGIN_COUNT DESC) 
         WHERE ROWNUM = 1) 

Partager et profiter.

2

Voici le moyen facile:

SELECT 
    t.login_name 
    ,COUNT(t.id) AS login_counts 
    ,MAX(t.login_time) AS latest_login_time 
FROM this_table AS t 
GROUP BY t.login_name 
ORDER BY login_counts DESC, login_name 
; 

La première ligne vous donne la login_name avec le plus logins.

Et voici la dure:

SELECT 
    t.login_name 
    ,MAX(t.login_time) AS latest_login_time 
FROM this_table AS t 
INNER JOIN (
    -- Determine who has the most logins 
    SELECT TOP 1 x.login_name, COUNT(x.id) AS login_count 
    FROM this_table AS x 
    GROUP BY x.login_name 
    ORDER BY login_count DESC -- to get the highest counts first 
) AS m 
    ON t.login_name = m.login_name 
GROUP BY t.login_name 
; 

Que vous obtient un nom et la date, et voilà, si elle ne prend pas en compte la possibilité qu'il pourrait y avoir plus de 1 nom avec le maximum nombre de connexions. Je vais vous laisser le soin de comprendre.