2013-01-22 3 views
0

MySQL SQL 명령에 문제가 있습니다.
내가 3 열이있는 테이블을 가지고있다 :SQL 쿼리에서 double 값 필터링

id (int) | ip(string) | time(mysql timestamp) 

내가 시간이별로 그룹화 된 모든 행 수를 갖고 싶어.

SELECT DATE(TIME) as date, COUNT(*) as count 
FROM table 
WHERE TIME > (NOW() - INTERVAL 10 DAY) 
GROUP BY DATE( `time`) 


음,하지만 지금은 이중 IP를 무시하려는 : 나는 그것을 위해 다음 코드를 사용합니다. 예를 들어 :

ID | time     | IP 
-------------------------------------- 
1 | 2013-01-21 20:48:01 | 127.0.0.1 
2 | 2013-01-22 20:48:01 | 127.0.0.1 
3 | 2013-01-22 20:48:01 | 127.0.0.1 
4 | 2013-01-22 20:48:01 | 127.0.0.3 

I하려는 경우에만 다음 datas 참조 : 난 MySQL의 테이블에 다음 datas를 넣어 경우

date  | count 
------------------ 
2013-01-21 | 1 
2013-01-22 | 2 

을 할 수있는 가장 좋은 방법은 무엇입니까? 내 응용 프로그램에서 모든 중복을 제거하는 루프를 응용 프로그램에서 만들지는 않을 것입니다. 왜냐하면 테이블이 빠르게 커지기 때문에 응용 프로그램에서 많은 리소스가 필요할 것이기 때문입니다.

답변

4

이 시도 :

SELECT DATE(`time`) as date, COUNT(DISTINCT IP) as count 
FROM table 
WHERE `time` > (NOW() - INTERVAL 10 DAY) 
GROUP BY DATE( `time`) 

SQL FIDDLE DEMO