我有一个非常简单的表:
+----------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+
| time | int(11) | YES | | 0 | |
| username | varchar(120) | NO | MUL | | |
| ip | varchar(40) | NO | MUL | | |
| failed | varchar(40) | NO | MUL | | |
+----------+--------------+------+-----+---------+-------+
我想查询几个特定的用户,我想要登录计数和最近的登录(如果存在任何登录)。我尝试了“GROUP BY”的各种组合,但没有任何效果。
我的简单计数查询是这样的:
mysql> SELECT count(*), username FROM logins WHERE username='foo@bar.com' and failed='0' group by username;
我怎样才能返回包含计数和上次登录的单行?
如果将时间戳转换为人类友好的格式,则可加分。
编辑:第一个答案对我来说似乎最清楚,而且效果很好。
我也想到了这个,它似乎可以工作并在大约相同的时间内返回,但我不确定我在用嵌套的 SELECT 做什么:
SELECT COUNT(*), username (SELECT MAX(time)) FROM logins WHERE username='foo@bar.com' AND failed='0' GROUP BY username;
并获得人类可读的时间:
SELECT COUNT(*), username (SELECT FROM_UNIXTIME(MAX(time))) FROM logins WHERE username='foo@bar.com' AND failed='0' GROUP BY username;
这个版本和第一个答案中看起来更合适的查询都需要大约 2 分钟 27 秒(该表有大约 1.61 亿行)。
最佳答案
Max(time)
将为您提供最晚的登录时间。请参阅下面的完整查询
SELECT username,
COUNT(*) AS `count`,
Max(`time`) AS `latest`
FROM logins
WHERE username = 'foo@bar.com'
AND failed = '0'
GROUP BY username;
关于MySQL 计数登录并返回最新登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9848200/