我遇到了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
最好的方法是什么?我不会在我的应用程序中创建一个删除所有重复项的循环,因为表会快速增长,如果我在我的应用程序中这样做,我会花费很多资源。
答案 0 :(得分: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 强>