跟踪红移中的客户流失

时间:2019-01-29 19:42:01

标签: sql amazon-redshift

我有一个看起来像这样的数据库。它具有:

acct_open_dt,即开设帐户的日期。

acct_close_dt,即帐户关闭的日期。

dayssinceopendt,即今天-acct_open_dtacct_close_dt为null或  acct_close_dt-acct_open_dt,如果acct_close_dt不为空。

enter image description here

我想要什么:

对于1990年1月1日到今天的一天序列,我想查找每天有多少客户活跃。

我的初衷是做

case when
dateadd(day,dayssinceopenddt,acct_open_date) > '1990-01-01'
then 1
else 0 end as here_on_19900101

整天,然后对每个新列进行汇总,但这将是超级手动且效率低下的事情。

我该怎么做呢?

(当然,我计划将班级从数字更改为日期,您不必在答案中包括该类。)

1 个答案:

答案 0 :(得分:1)

这可能就够了:

with t as (
      select acct_open_dt, count(*) as ins, 0 as outs
      from t
      group by acct_open_dt
      union all
      select acct_close_dt, 0 as ins, count(*) as outs
      from t
      group by acct_close_dt
     )
select dt,
       (sum(sum(ins)) over (order by dt) -
        sum(sum(outs)) over (order by dt)
       ) as actives_on_day
from t
group by dt;

这将仅返回数据中的日期,但这可能就足够了。

请注意,在此逻辑中,结束日期不被视为有效日期。