2013-05-27 77 views
5

一组由结果后,我有如下表,如何使用WHERE子句中的MySQL

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 | 

我想找到“用户名”谁第一次访问是在过去的12个小时。

我知道如何在第一时间拿到每个用户已登录使用以下查询

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 | 
+------------+---------------------+ 

所以现在我triying让这些用户名这样做:

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

但obviouly它不起作用...

回答

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

在SQL中,WHERE限制行,但是HAVING限制g roups。

+2

更像哪里在行级别运行在扫描表,并有工作在结果集的水平,毕竟集合函数会计算其结果。 –

0

完美的答案是比尔这里,但对于穷尽的缘故大卫的尝试是值得修正:

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