我有一个非常简单的表格:
+----------+--------------+------+-----+---------+-------+
| 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;这个版本和第一个答案中看起来更合适的查询都需要大约2m27s(表大约有1.61亿行)。
发布于 2012-03-24 09:00:41
Max(time)将为您提供最新的登录时间。查看下面的完整查询
SELECT username,
COUNT(*) AS `count`,
Max(`time`) AS `latest`
FROM logins
WHERE username = 'foo@bar.com'
AND failed = '0'
GROUP BY username; 发布于 2012-03-24 08:59:08
请在下面进行尝试:
SELECT count(*), username,time
FROM logins
WHERE username='foo@bar.com' and failed='0'
group by username
order by time desc或
SELECT count(*), username,max(time)
FROM logins
WHERE username='foo@bar.com' and failed='0'
group by username 发布于 2012-03-24 09:24:22
select username, count(username) count, max(time) time
from logins where username in ("a","b") group by usernamehttps://stackoverflow.com/questions/9848200
复制相似问题