2012-06-05 109 views
3

我正在构建一份报告,以确定点击我网站上特定按钮的访问者数量。在分析我的日志之后,我发现访问者会在一两分钟内多次点击同一个按钮(有时达到10次),这完全扭曲了结果。每5分钟查询点击

我想创建一个查询,将在5分钟的时间内只计算一次每个访问者(通过IP)一次。我已经提出了以下内容,这给了我总数,但我似乎无法找到将其分解成大量时间的正确组合。 (日期时间型日期)的

SELECT count(ip), ip, link, datetime FROM `clicks` group by ip, link 

有没有一种简单的方法来做到这一点,还是我想这个错误?如果有必要,我想我可以在一天之内对其进行分组,但如果可能的话,我真的希望更细化地分解它。

任何指向正确的方向将非常感谢!

+0

如果不是 '日期时间' 列中输入'DATETIME ',而不是'DATE'?你能提供一个输入和期望输出的例子吗? –

回答

2

如果你今天想每5分钟间隔IP地址的数量,试试这个:

SELECT COUNT(ip) ipcount,dt FROM 
(
    SELECT 
    ip,(datetime - INTERVAL MOD(UNIX_TIMESTAMP(datetime),300)) SECOND dt 
    FROM `clicks` 
    WHERE datetime >= (DATE(NOW()) + INTERVAL 0 SECOND) 
) A 
GROUP BY dt; 

表达DATE(NOW()) + INTERVAL 0 SECOND今天午夜

mysql> select DATE(NOW()) + INTERVAL 0 SECOND; 
+---------------------------------+ 
| DATE(NOW()) + INTERVAL 0 SECOND | 
+---------------------------------+ 
| 2012-06-05 00:00:00    | 
+---------------------------------+ 
1 row in set (0.00 sec) 

mysql> 
+0

感谢您的快速响应。您的添加只会选择过去5分钟内的数据,而我正在整天查看访问次数,但是会在5分钟内对其进行分组和计数。例如,如果有人点击现在的链接,然后在10分钟内再次点击,我希望这两个点击都显示在自己的行中。 – Jimmyb