在分组后选择具有最大列值的条目

时间:2012-10-13 12:45:41

标签: mysql group-by

我目前有这个问题:

SELECT 
    `users_sessions`.`userid` `users_sessions`.`lastActive` , `users`.`firstname`
FROM 
    `users_sessions` , `users`
WHERE 
    `users_sessions`.`lastActive` >= DATE_SUB( NOW( ) , INTERVAL 60 MINUTE )
AND 
    `users`.`uidNumber` = `users_sessions`.`userid`

选择lastActive最长1小时前的所有会话。现在,由于用户可以同时拥有多个会话,我只想选择值lastActive最大的会话。

我知道我以某种方式使用GROUP BY users_sessions.userid,然后选择最大lastActive的条目。

我该如何正确地做到这一点?

2 个答案:

答案 0 :(得分:1)

SELECT 
    `users_sessions`.`userid`, `users_sessions`.`lastActive` , `users`.`firstname`
FROM 
    `users_sessions` , `users`
WHERE 
    `users_sessions`.`lastActive` >= DATE_SUB( NOW( ) , INTERVAL 60 MINUTE )
AND 
    `users`.`uidNumber` = `users_sessions`.`userid`
GROUP BY 
    `users_sessions`.`userid`, `users_sessions`.`lastActive` , `users`.`firstname`
HAVING
    `lastActive` = MAX(`lastActive`)

答案 1 :(得分:1)

只需选择 MAX(users_sessionslastActive,而不是 users_sessionslastActive 并使用 GROUP BY usersuidNumber 。它应该工作。