我有一个包含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中进行循环并为每个月运行单独的查询?
我知道这不是非常困难,并且肯定会在文档中涵盖,但我对搜索的术语感到困惑。
答案 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;
请注意,输出格式与您的建议略有不同。这会将每行的年/月添加为单独的列。此格式与关系结果集更加一致。