MySQL:从特定时间范围内检索记录数

标签 mysql datetime count

所以我想做的事情有点棘手。我正在尝试提出一个能够返回指定时间范围内的计数的 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/

相关文章:

sqlite - 如何在 sqlite 中构造我的查询?

php - MySQL计数查询不起作用,但它显示记录列表

mysql - 如何让mysql使用当前有效的linux用户作为mysql的默认用户?

mysql - 在mysql中使用多列过滤数据

java - 在 hibernate 中使用 MySQL 变量和赋值

r - 按顺序计算字符数,忽略给定字符 (R)

php - 使用 WHERE 子句加速 MySQL (MyISAM) 计数

java - 坚持一对多关系时违反约束

python - 如何从 pandas 的日期列中查找不匹配的值

Postgresql - 获取相对于给定日期时间值最近的日期时间行