2013-05-27 9 views
5

ho la tabella che segue,come usare la clausola in cui dopo che un gruppo dal risultato in 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 | 

vorrei trovare il 'nome utente' che per primo accesso è stato nelle ultime 12 ore.

so come ottenere la prima volta che ogni utente è stati disconnessi con la seguente 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 | 
+------------+---------------------+ 

così ora io sto triying per ottenere quei nomi utente a fare questo:

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

ma obviouly esso non funziona ...

risposta

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

In SQL, WHERE limita le righe, ma HAVING limita g ruppi.

+2

più simile in cui opera a livello di riga durante la scansione del tavolo, e avendo opera a livello di set di risultati, dopo tutto le funzioni aggregate hanno i loro risultati calcolati. –

0

La risposta perfetta è di qui, ma per provare l'amor esaustività di David Bill vale la pena di correggere:

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