簡體   English   中英

是否有 SQL 代碼用於幾個月內 SaaS 客戶的累積計數?

[英]Is there a SQL code for cumulative count of SaaS customer over months?

我有一個表:ID(id 客戶端)、date_start(SaaS 訂閱)、date_end(可以是日期值或為 NULL)。

所以我需要逐月累積活躍客戶的數量。

關於如何在 Postgres 中編寫並實現此結果的任何想法? 在此處輸入圖像描述

從這里開始,但我不知道如何進行

select 
date_trunc('month', c.date_start)::date,
count(*) 
from customer

請檢查下一個解決方案:

select 
    subscrubed_date,
    subscrubed_customers,
    unsubscrubed_customers,
    coalesce(subscrubed_customers, 0) - coalesce(unsubscrubed_customers, 0) cumulative
from (
    select distinct
    date_trunc('month', c.date_start)::date subscrubed_date,
    sum(1) over (order by date_trunc('month', c.date_start)) subscrubed_customers
    from customer c
    order by subscrubed_date
) subscribed
left join (
    select distinct
    date_trunc('month', c.date_end)::date unsubscrubed_date,
    sum(1) over (order by date_trunc('month', c.date_end)) unsubscrubed_customers
    from customer c
    where date_end is not null
    order by unsubscrubed_date
) unsubscribed on subscribed.subscrubed_date = unsubscribed.unsubscrubed_date;

分享SQL查詢

您有一張客戶表。 有開始日期,有時還有結束日期。 由於您想按日期分組,但表中有兩個日期,您需要先拆分這些日期。

然后,您可能有幾個月只有客戶來,而其他幾個月只有客戶離開。 因此,您需要兩個集合的完全外部連接。

對於累積總和(也稱為運行總計),請使用SUM OVER

with came as
(
  select date_trunc('month', date_start) as month, count(*) as cnt 
  from customer
  group by date_trunc('month', date_start)
)
, went as
(
  select date_trunc('month', date_end) as month, count(*) as cnt
  from customer
  where date_end is not null
  group by date_trunc('month', date_end)
)
select
  month,
  came.cnt as cust_new,
  went.cnt as cust_gone,
  sum(came.cnt - went.cnt) over (order by month) as cust_active
from came full outer join went using (month)
order by month;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM