Php Mysql查询以查找给定日期范围内某个值的出现次数

Php Mysql查询以查找给定日期范围内某个值的出现次数,php,mysql,Php,Mysql,我有一个包含7000000行和两列的表:一个名称和一个时间戳。其中的数据如下所示: NAME - TIMESTAMP Arnie - 2012-05-15 09:31:21 Arnie - 2012-05-15 10:31:21 Jethro - 2012-05-15 12:31:21 Regina - 2012-05-15 12:31:21 Beatriz - 2012-05-16 0:31:21 Jethro - 2012-05-15 08:31:21 Jethro - 2012-06-1

我有一个包含7000000行和两列的表:一个名称和一个时间戳。其中的数据如下所示:

NAME  - TIMESTAMP
Arnie - 2012-05-15 09:31:21
Arnie - 2012-05-15 10:31:21
Jethro - 2012-05-15 12:31:21
Regina - 2012-05-15 12:31:21
Beatriz - 2012-05-16 0:31:21
Jethro - 2012-05-15 08:31:21
Jethro - 2012-06-15 08:31:21
Jethro - 2012-06-16 08:31:21
Archie - 2012-06-16 09:31:21
Jethro - 2012-06-17 08:31:21
自2012年1月以来的每个月,我想知道每个名字在该月出现了多少次,因此对于上面的示例,我希望:

June 2012

Arnie - 2
Jethro - 2
Regina - 1
Beatriz - 1

July 2012

Jethro - 3
Archie - 1
最好的方法是什么?另外,是否有一种方法可以将此作为一个查询来运行,按月对时间戳进行分组,或者我应该在PHP中循环并为每个月运行一个单独的查询


我知道这并不是很难,文档中肯定有介绍,但我对要搜索的术语感到困惑

您可以使用
分组依据
并获取计数,您可以使用
月名

SELECT Name, MONTHNAME(TIMESTAMP) AS Month, COUNT(*) AS count
FROM Table1
GROUP BY NAME, MONTHNAME(TIMESTAMP)
试试这个:

select date_format(timestamp, '%Y %M') as yyyymm, name, count(*)
from table t
group by date_format(timestamp, '%Y %M'), name
order by min(timestamp), name;

请注意,输出格式与您建议的略有不同。这会将年/月作为单独的列添加到每一行中。此格式与关系结果集更为一致。

谢谢,也感谢Fiddle DACrosby。我应该给遇到它的人贴上什么标签呢?等等,奇怪的是,结果是按月份排序的,月份名称是按字母顺序排列的,而不是按顺序排列的。我可以很容易地把它清理干净。@pg。哎呀。我通常用数字表示月份。这可以通过使用
min(时间戳)
轻松解决。