我创建了一个数据库来存储来自网站的统计信息,例如流量。我正在尝试查询数据库中过去30天内捕获的唯一IP地址的数量;
SELECT COUNT(*) totalA FROM statistics GROUP by ipAddress
AND DATE_SUB(CURDATE( ) ,INTERVAL 30 DAY) LIMIT 0, 30
但是查询只返回表中的数据条目数。我使用相同的查询减去日期过滤器并得到了正确的结果所以它只是日期过滤搞砸了
任何帮助将不胜感激
答案 0 :(得分:0)
这是因为GROUP BY
上的ipAddress AND DATE_SUB(CURDATE( ), INTERVAL 30 DAY)
,此表达式在两个字段之间产生逻辑AND
,这两个字段只有两个可能的值。尽管如此,你并不关心这种区别,仅仅要求count(*)
。
你可能想要的是:
SELECT ipAddress, DATE_SUB(CURDATE( ), INTERVAL 30 DAY), COUNT(*) AS totalA
FROM statistics
GROUP by ipAddress, DATE_SUB(CURDATE( ), INTERVAL 30 DAY)
LIMIT 0, 30
答案 1 :(得分:0)
我认为这就是你要找的东西。基本上我只是将您的日期代码放在WHERE子句中,并将其与表中的日期列进行比较。显然,您需要将“entryDate”更改为日期列的名称。
SELECT COUNT(*) AS totalA
FROM statistics
WHERE entryDate >= DATE(CURDATE()-INTERVAL 30 DAY)
GROUP BY ipAdress