如果您发出这样的查询,我很熟悉 MySQL 遇到的问题:
SELECT `user_log`.`USER_NAME`, MAX(`user_log`.`ACCESS_DATE_TIME`), `user_log`.`COMPUTER_NAME`, `user_log`.`LOCATION`
FROM `user_log`
GROUP BY `user_log`.`USER_NAME`
ORDER BY `user_log`.`ACCESS_DATE_TIME` DESC
这不会像您想的那样返回与 MAX ACCESS_DATE_TIME 关联的 COMPUTER_NAME 和 LOCATION。它将返回由您的 GROUP BY 列(所有 USER_NAME)定义的集合中的第一个值。
因此,为了解决这个问题,我正在尝试构建一个链接 MAX...GROUP BY sql 的查询,其中一个选择我需要的所有列,其中 USER_NAME 和 ACCESS_DATE_TIME 属于获取用户 MAX 的集合...GROUP 语句。
这就是我所拥有的->
SELECT `user_log`.`USER_NAME`, `user_log`.`ACCESS_DATE_TIME`, `user_log`.`COMPUTER_NAME`, `user_log`.`LOCATION`
FROM `user_log`.`user_log`
JOIN (SELECT `user_log`.`USER_NAME`, MAX(`user_log`.`ACCESS_DATE_TIME`) as sub_max
FROM `user_log`
GROUP BY `USER_NAME`
ORDER BY sub_max DESC) as sub
WHERE (`user_log`.`USER_NAME` = sub.`USER_NAME` AND `user_log`.`ACCESS_DATE_TIME` = sub.sub_max)
但是,它不是很快......有没有更好的方法来做到这一点?我敢肯定,现在有人想出了一些东西……