0

我遇到了 MySQL SQL 命令的问题。
我有一个包含 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 小提琴演示

于 2013-01-22T21:24:18.043 回答