Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 选择分组后列值最大的条目_Mysql_Group By - Fatal编程技术网

Mysql 选择分组后列值最大的条目

Mysql 选择分组后列值最大的条目,mysql,group-by,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`.`uidNum

我目前收到了以下查询:

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
值的会话

我知道我不知何故使用了
groupbyusers\u sessions.userid
,然后选择了
lastActive
最大的条目


如何正确执行此操作?

只需选择MAX(
users\u sessions
lastActive
而不是
users\u sessions
lastActive
并使用
用户分组
uidNumber
。它应该可以工作。

在您的
分组依据
部分中,您是按照所有选定的列进行分组的。在我最初的查询中,我选择了更多的列。我是否应该按所有列进行分组?您必须始终按所有选定列进行分组。如果有人看到,答案是不正确的。
HAVING
子句将
lastActive
的任意值与最大值进行比较,这可能会不必要地过滤掉一些行。这样做可能会引入一个微妙的错误,因为显示的行不一定是具有该lastActive的行。显示组中的随机行,然后从具有最高lastActive的行中添加lastActive。可能不是同一行。我在select子句中选择了lastActive的最大值,而不是lastActive。因此,据我所知,这不应该是您要问的问题。您从具有相同id的行组中获得最高的lastActive,但不是具有最高lastActive的行。这是按顺序选择的。我的回答会得到正确的答案。在这个用例中,您可能不会注意到任何bug,但如果列更多,您可能会注意到。
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`)