简体   繁体   English

如何在mysql的结果中使用where子句

[英]how to use where clause after a group by result in mysql

I have the following table, 我有下表,

    mysql> select username,authdate from radpostauth;
+------------+---------------------+
| username   | authdate            |
+------------+---------------------+
| timetest   | 2013-05-21 22:44:46 |
| timetest   | 2013-05-21 23:54:20 |
| coconeja   | 2013-05-22 00:01:42 |
| coconeja   | 2013-05-22 00:06:35 |
| coconeja   | 2013-05-25 22:35:34 |
| timetest   | 2013-05-25 23:04:54 |
| distom11   | 2013-05-25 23:10:47 |
| distom11   | 2013-05-25 23:16:42 |
| test       | 2013-05-25 23:45:16 |
| pepe       | 2013-05-26 00:07:00 |
| doce       | 2013-05-26 00:46:48 |
| 6096753968 | 2013-05-26 01:42:30 |
| 2269664468 | 2013-05-26 01:43:57 |
| 2076877624 | 2013-05-26 02:01:53 |
| 4446830988 | 2013-05-26 02:02:28 |
| 2076877624 | 2013-05-26 02:08:53 |
| 3906187975 | 2013-05-26 22:00:30 |
| 3906187975 | 2013-05-26 22:21:44 |
| kk         | 2013-05-26 22:32:20 |
| kk         | 2013-05-26 22:44:19 |
| 160059817  | 2013-05-27 00:53:56 |
| yibced9    | 2013-05-27 13:32:00 |
| yibced9    | 2013-05-27 13:37:53 |
| yibced9    | 2013-05-27 13:38:01 |
| yibced9    | 2013-05-27 13:38:02 |
| yibced9    | 2013-05-27 13:38:03 |
| yibced9    | 2013-05-27 13:38:39 |
| yibced9    | 2013-05-27 13:38:40 |
| yibced9    | 2013-05-27 13:38:41 |
| yibced9    | 2013-05-27 13:44:40 |

I want to find the 'usernames' who first access was in the last 12 hours. 我想找到过去12小时内首次访问的“用户名”。

I know how to get the first time each user have been logged with the following query 我知道如何使用以下查询第一次记录每个用户

    mysql> select username,min(authdate) from radpostauth group by username;
+------------+---------------------+
| username   | min(authdate)       |
+------------+---------------------+
| 160059817  | 2013-05-27 00:53:56 |
| 2076877624 | 2013-05-26 02:01:53 |
| 2269664468 | 2013-05-26 01:43:57 |
| 3906187975 | 2013-05-26 22:00:30 |
| 4446830988 | 2013-05-26 02:02:28 |
| 6096753968 | 2013-05-26 01:42:30 |
| coconeja   | 2013-05-22 00:01:42 |
| distom11   | 2013-05-25 23:10:47 |
| doce       | 2013-05-26 00:46:48 |
| kk         | 2013-05-26 22:32:20 |
| pepe       | 2013-05-26 00:07:00 |
| test       | 2013-05-25 23:45:16 |
| timetest   | 2013-05-21 22:44:46 |
| yibced9    | 2013-05-27 13:32:00 |
+------------+---------------------+

so now I am triying to get those usernames doing this: 所以现在我正在试图让这些用户名这样做:

select *
from radpostauth
where (
    select username,min(authdate)
    from radpostauth group by username
    ) > timediff( now(),maketime(12,0,0,) );

but obviouly it doesn't work... 但显然它不起作用......

select username, min(authdate) 
from radpostauth 
group by username
having min(authdate) > NOW() - INTERVAL 12 HOUR

In SQL, WHERE restricts rows, but HAVING restricts groups. 在SQL中,WHERE限制行,但是HAVING限制组。

The perfect answer is Bill's here but for exhaustivity sake David's try is worth correcting: 完美的答案是比尔在这里,但为了穷举,大卫的尝试值得纠正:

SELECT *
FROM (
    SELECT username, MIN(authdate) as min_authdate
    FROM radpostauth
    GROUP BY username
) T
WHERE min_authdate > NOW() - INTERVAL 12 HOUR;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM