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;