如何查找自2016年1月以来每月的活跃帐户



我有一个下面的表:Account_id, start_date, end_date

从2016年1月开始的每个月,我想要统计活跃账户的数量。如果我有一个账户A,开始:'2017-01-01 00:00:00',结束:'2017-12-31 00:00:00',那么这个账户将被认为在2017年的所有月份都是活跃的。有什么想法我可以计算与postgresql?

您可以使用generate_series()生成月份,然后使用left join和聚合。以下计算每月第一天活动的帐户:

select gs.mon, count(a.start_date) as num_active
from generate_series('2016-01-01'::date, date_trunc('month', now()), interval '1 month') gs(mon) left join
accounts a
on a.start_date <= gs.mon  and
(a.end_date >= gs.mon or a.end_date is null)
group by gs.mon;

最新更新