所以我想做的事情有点棘手。我正在尝试提出一个能够返回指定时间范围内的计数的 sql 查询。所以我有一张 table 'v'。这是表v中的一些基本数据
Table v
_____________
id p_id created_at
1 1 2009-06-09 18:54:17
2 2 2009-06-09 21:51:24
3 2 2009-06-10 18:53:51
4 1 2009-06-10 01:20:36
5 1 2009-06-10 11:20:36
基本上,我想获得指定时间范围(小时、天、周、月、年)的结果。我已经用了好几天了……但是我无法返回包含零计数的时间帧的结果。基本上我想给它一个时间范围和一个分隔符(小时、天等),并能够在该时间范围内从表 v 中获取行数。
这是我目前尝试的:
select count(*) as count, date_format(created_at, "%m/%d/%y") as date from v where p_id = 56 group by date_format(created_at, "%m/%d/%y");
返回
+-------+-------------------------------------+
| count | date_format(created_at, "%m/%d/%y") |
+-------+-------------------------------------+
| 3 | 06/09/09 |
+-------+-------------------------------------+
但这并没有考虑时间范围。有什么想法吗?
最佳答案
我通常推荐的做法是:
SELECT COUNT(*) AS `num`
FROM `table`
WHERE `created_at` >= '2009-09-06 00:00:00'
AND `created_at` < '2009-09-07 00:00:00'
即在您的日期/时间范围内直接查询,这解决了不同时间跨度等问题。如果表中有足够的记录,created_at
上的索引可能会变得无用,但它仍然比与 DATE_FORMAT
结果进行比较要好;除非查询优化器比我想象的要聪明得多,否则它将针对每一行运行 DATE_FORMAT
并比较结果,而不是完全不用索引。
我怀疑有些事情我没有处理你的情况导致这对你不起作用,或者你已经这样做了,但我想我必须等待反馈才能看到那些是。
关于MySQL:从特定时间范围内检索记录数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/977507/