我是一个相当新的Postgres用户,我肯定已经有了答案,但我找不到。
我需要分析活动日志表中的一些数据,按时间段对结果进行分组。
问题的简单版本是一个包含三个字段的表:

    Column    |           Type           |              Modifiers
--------------+--------------------------+-------------------------------------
 period_start | timestamp with time zone | not null
 user_id      | text                     | not null
 action       | text                     | not null

我想捕捉的动作字符串可以是“create_entry”(是的,我知道这和好的数据库设计一样糟糕,但我坚持了下来)
我要找的输出是一份按年和月显示“创建条目”操作计数的报告。类似于:
 Year | Month | Entries
------+-------+----------
 2013 |  12   | 14345
 2014 |   1   | 9876
 2014 |   2   | 10234

我的直觉是用子查询来攻击这个问题,但是环顾四周似乎有一个暗示,循环可能是解决问题的方法。
不管怎样,我都不知道该往哪个方向推。
编辑
一个补充问题,基于我输入这个时收到的请求。。上面的一个变化将显示一个月一个月的累积总数(尽管我想我可以根据上面的方法自己计算出来-我只是添加这个,以防它与方法相关)。

最佳答案

如果我理解正确,您只需要将表中的年份和月份GROUP BY,对于action的每一行:

SELECT
  DATE_PART('YEAR', period_start) as Year,
  DATE_PART('MONTH', period_start) as Month,
  COUNT(*) as Entries
FROM activity_log
WHERE action = 'create_entry'
GROUP BY Year, Month;

SQL Fiddle

10-06 01:47