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