我是一个相当新的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