0

MySQLSQLコマンドに問題があります。
3列のテーブルがあります。

 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を無視したいと思います。例:次のデータをmysqlテーブルに配置した場合:

 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  

次のデータのみを表示したい:

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

それを行うための最良の方法は何ですか?テーブルが急速に大きくなり、アプリケーションでそれを行うと多くのリソースがかかるため、アプリケーションですべての重複を削除するループを作成するつもりはありません。

4

1 に答える 1

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

于 2013-01-22T21:24:18.043 に答える