Postgresql 研究生按学年分组

Postgresql 研究生按学年分组,postgresql,group-by,Postgresql,Group By,我有一个查询,其中我计算每年的行数: SELECT count(*) as activation_count , extract(year from activated_at) as year FROM "activations" WHERE ... GROUP BY year 但是我希望从9月到9月,而不是从1月到1月。因此,按学年而不是日历年进行分组 我可以修改我的查询来做到这一点吗 更一般地说,是否可以按时间范围分组并指定偏移量,例如:提取(从激活的年起,偏移间隔为2个月)为年

我有一个查询,其中我计算每年的行数:

SELECT 
  count(*) as activation_count
, extract(year from activated_at) as year
FROM "activations" 
WHERE ... 
GROUP BY year
但是我希望从9月到9月,而不是从1月到1月。因此,按学年而不是日历年进行分组

我可以修改我的查询来做到这一点吗


更一般地说,是否可以按时间范围分组并指定偏移量,例如:
提取(从激活的年起,偏移间隔为2个月)为年(这不起作用,只是我想要的想法)

假设在
激活的年数为“2016-09-01”的人应计为
年=2017
,在
提取
(翻译(数学意义上的)9月到1月)中,您可以在
激活时添加4个月


如果它应该被计算为
year=2016
,你可以删除8个月。

假设某个人的
activated\u at
是'2016-09-01'应该被计算为
year=2017
,你可以在
extract
中添加4个月九月至一月)


如果它应该算作2016年,你可以去掉8个月。

你基本上想要的是把9月之后的所有日期都当作“下一年”,所以下面应该是有效的:

select count(*) as activation_count,
       case 
          when extract(month from activated_at) >= 9 then extract(year from activated_at) + 1
          else extract(year from activated_at)
       end as school_year
from activations
group by school_year;

基本上,您希望将9月之后的所有日期都视为“下一年”,因此以下内容应该有效:

select count(*) as activation_count,
       case 
          when extract(month from activated_at) >= 9 then extract(year from activated_at) + 1
          else extract(year from activated_at)
       end as school_year
from activations
group by school_year;