我想计算客户对以下数据的增长率。 p>
month | customers
-------------------------
01-2015 | 1
02-2015 | 10
03-2014 | 10
06-2015 | 15
我使用以下公式来计算增长率,它仅适用于一个月的间隔,并且由于第3个月和第6个月之间的差距而无法给出预期的产出,如上表所示
select
month, total,
(total::float / lag(total) over (order by month) - 1) * 100 growth
from (
select to_char(created, 'yyyy-mm') as month, count(id) total
from customers
group by month
) s
order by month;
我认为可以通过按该范围创建日期范围和组来完成。
我预计两个主要输出分开 1)产生增长率,确切的一个月差异 2)增长率,间隔2个月而不是单个月。在上面的数据中,将两个月的结果和分组相加两个月而不是一个月
答案 0 :(得分:0)
仍然不确定第二部分。从您的改编查询和两个月增长列开始增长:
select
month, total,
(total::float / lag(total) over (order by m) - 1) * 100 growth,m,m2
from (
select created, (sum(customers) over (order by m))::float total,customers,m,m2,to_char(created, 'yyyy-mm') as month
from customers c
right outer join (
select generate_series('2015-01-01','2015-06-01','1 month'::interval) m
) m1 on m=c.created
left outer join (
select generate_series('2015-01-01','2015-06-01','2 month'::interval) m2
) m2 on m2=m
order by m
) s
order by m;
基本上答案是使用generate_series