Postgresql如何在where子句中从上一年获取last year_month

pgx2nnw8  于 2022-11-04  发布在  PostgreSQL
关注(0)|答案(1)|浏览(267)

我需要显示我们有多少活跃的客户和年底。因此,我需要得到总是去年_月从去年。使用PostgreSQL。
这里我的SQL得到了客户基数的月度(year_month)视图。

select *

from (

with data as (
select 
a.brand,
a.d,
a.activations,
t.terminations,
a.activations-t.terminations count
from (select c.brand, dd.year_month d,
             COALESCE(case when dd.year_month is not null then count(c.customer_number) else 0 end, 0) as activations
             from generate_series(current_date - interval '8 years', current_date, '1 day') d
             left join dim_date dd on dd."date" = d.d
             left join r_contracts_report c on to_date(c.service_start_date, 'dd.mm.yyy') = d 
             where c.contract_status in ('aktiv', 'Kündigung vorgemerkt', 'gekündigt')
             and c.contract in ('3048', '3049', '3050', '3055', '3056')
             group by dd.year_month,
             brand) a,
             (select c.brand, dd.year_month d,
             COALESCE(case when dd.year_month is not null then count(c.customer_number) else 0 end, 0) as terminations
             from generate_series(current_date - interval '8 years', current_date, '1 day') d
             left join dim_date dd on dd."date" = d.d
             left join r_contracts_report c on to_date(c.termination_date, 'dd.mm.yyy') = d 
             where c.contract_status in ('aktiv', 'Kündigung vorgemerkt', 'gekündigt')
             and c.contract in ('3048', '3049', '3050', '3055', '3056')
             group by dd.year_month,
             brand) t
where a.d = t.d
and a.brand = t.brand)

select
  d.d year_month,
  d.brand,
  sum(count) over (order by d.d asc rows between unbounded preceding and current row) eop
from data d
where d.brand = '3'

) as foo

在“as foo”后面使用下面的where子句,我得到了过去12个月的客户群:WHERE年_月〉=至_字符((当前日期- INTERVAL '12个月'),'YYYY-MM')
结果看起来像这样:

但我总是希望只有前一年的12月,在这种情况下,它将是“2021- 12”。

pjngdqdw

pjngdqdw1#

...
where year_month = '2021-12'

或自动为上一年:

...
where year_month = (extract(year from current_date) - 1)::text || '-12'

但这是一种非常低效的获取数据的方式。

相关问题