2013-05-27 33 views
5

Tôi có bảng sau,cách sử dụng mệnh đề where sau khi một nhóm bằng kết quả trong 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 | 

Tôi muốn tìm ra 'username' người truy cập đầu tiên là trong vòng 12 giờ qua.

tôi biết làm thế nào để có được lần đầu tiên mỗi người dùng đã đăng nhập với truy vấn sau đây

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

vì vậy bây giờ tôi đang triying để có được những tên người dùng thực hiện điều này:

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

nhưng obviouly nó không hoạt động ...

Trả lời

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

Trong SQL, WHERE hạn chế hàng, nhưng HAVING hạn chế g roups.

+2

giống như nơi hoạt động ở mức hàng trong khi quét bàn, và có hoạt động ở cấp kết quả thiết lập, sau khi tất cả các hàm tổng hợp có kết quả tính toán của chúng. –

0

Câu trả lời hoàn hảo là Bill đây nhưng đối với thử exhaustivity vì David là giá trị sửa chữa:

SELECT * 
FROM (
    SELECT username, MIN(authdate) as min_authdate 
    FROM radpostauth 
    GROUP BY username 
) T 
WHERE min_authdate > NOW() - INTERVAL 12 HOUR; 
Các vấn đề liên quan