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

时间:2014-12-01 20:47:56

标签: php mysql

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

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中进行循环并为每个月运行单独的查询?

我知道这不是非常困难,并且肯定会在文档中涵盖,但我对搜索的术语感到困惑。

2 个答案:

答案 0 :(得分:1)

您可以使用GROUP BY并获取计数,您可以使用MONTHNAME

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

答案 1 :(得分:1)

试试这个:

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;

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