如何计算 db2 中的流失率(保留率)?

问题描述 投票:0回答:1

以下是我的信息:组名称/YYYYMM/合同。 现在我需要过去 12 个月的流失率并且 SQL 高效运行。

我写了这个,但不能正常工作:

SELECT GROUP_NAME,ID, YRMO,SUM(FLOAT(CTC)) AS CTC_MOS,
MAX(CASE WHEN YRMO = VARCHAR_FORMAT(DATE(TO_DATE(@ENR_END_INC,'YYYYMM'))- 12 MONTHS, 'YYYYMM') THEN VARCHAR_FORMAT(DATE(TO_DATE(@ENR_END_INC,'YYYYMM'))- 12 MONTHS, 'YYYYMM') END)  AS YRMO_PRIOR,
SUM(CASE WHEN YRMO = VARCHAR_FORMAT(DATE(TO_DATE(@ENR_END_INC,'YYYYMM'))- 12 MONTHS, 'YYYYMM') THEN CTC END)  AS CTC_PRIOR

FROM TABLE1

以下是需要的示例数据:

GP  YRMO    Sum of CTC
B1  202001  8
B1  202002  8
B1  202003  8
B1  202004  8
B1  202005  9
B1  202006  9
B1  202007  9
B1  202008  9
B1  202009  8
B1  202010  8
B1  202011  8
B1  202012  10
B1  202101  11
B1  202102  11
B1  202103  11
B1  202104  11
B1  202105  12
B1  202106  12
B1  202107  12
B1  202108  12
B1  202109  12
B1  202110  12
B1  202111  12
B1  202112  11
B1  202201  11
B1  202202  11
B1  202203  11
B1  202204  13
B1  202205  14
B1  202206  15
B1  202207  22
B1  202208  23
B1  202209  23
B1  202210  23
B1  202211  24
B1  202311  27

我怎样才能制作出如下所示的东西:

sql db2 db2-400 db2-luw
1个回答
0
投票

你可以这样做:

select
  coalesce(c.gp, p.gp) as gp,
  coalesce(c.yrmo, p.yrmo + 100) as yrmo_current,
  coalesce(c.sum_of_ctc, 0) as ctc_current,
  coalesce(p.yrmo, c.yrmo - 100) as yrmo_prior,
  coalesce(p.sum_of_ctc, 0) as ctc_prior,
  case when p.sum_of_ctc = 0 or p.sum_of_ctc is null then 1.0
       when c.sum_of_ctc = 0 or c.sum_of_ctc is null then -1.0
       else (1.0 * c.sum_of_ctc - p.sum_of_ctc) / p.sum_of_ctc
  end * 100 as churn_rate
from t c
full join t p on p.gp = c.gp and p.yrmo = c.yrmo - 100
order by c.gp, c.yrmo

结果:

GP  YRMO_CURRENT  CTC_CURRENT  YRMO_PRIOR  CTC_PRIOR  CHURN_RATE              
 --- ------------- ------------ ----------- ---------- ----------------------- 
 B1  201911        6            201811      0          100.000000000000000000  
 B1  201912        8            201812      0          100.000000000000000000  
 B1  202001        8            201901      0          100.000000000000000000  
 B1  202002        8            201902      0          100.000000000000000000  
 B1  202003        8            201903      0          100.000000000000000000  
 B1  202004        8            201904      0          100.000000000000000000  
 B1  202005        9            201905      0          100.000000000000000000  
 B1  202006        9            201906      0          100.000000000000000000  
 B1  202007        9            201907      0          100.000000000000000000  
 B1  202008        9            201908      0          100.000000000000000000  
 B1  202009        8            201909      0          100.000000000000000000  
 B1  202010        8            201910      0          100.000000000000000000  
 B1  202011        8            201911      6          33.333333333333333300   
 B1  202012        10           201912      8          25.000000000000000000   
 B1  202101        11           202001      8          37.500000000000000000   
 B1  202102        11           202002      8          37.500000000000000000   
 B1  202103        11           202003      8          37.500000000000000000   
 B1  202104        11           202004      8          37.500000000000000000   
 B1  202105        12           202005      9          33.333333333333333300   
 B1  202106        12           202006      9          33.333333333333333300   
 B1  202107        12           202007      9          33.333333333333333300   
 B1  202108        12           202008      9          33.333333333333333300   
 B1  202109        12           202009      8          50.000000000000000000   
 B1  202110        12           202010      8          50.000000000000000000   
 B1  202111        12           202011      8          50.000000000000000000   
 B1  202112        11           202012      10         10.000000000000000000   
 B1  202201        11           202101      11         0.000000000000000000    
 B1  202202        11           202102      11         0.000000000000000000    
 B1  202203        11           202103      11         0.000000000000000000    
 B1  202204        13           202104      11         18.181818181818181800   
 B1  202205        14           202105      12         16.666666666666666600   
 B1  202206        15           202106      12         25.000000000000000000   
 B1  202207        22           202107      12         83.333333333333333300   
 B1  202208        23           202108      12         91.666666666666666600   
 B1  202209        23           202109      12         91.666666666666666600   
 B1  202210        23           202110      12         91.666666666666666600   
 B1  202211        24           202111      12         100.000000000000000000  
 B1  202311        27           202211      24         12.500000000000000000   
 B1  202310        0            202210      23         -100.000000000000000000 
 B1  202411        0            202311      27         -100.000000000000000000 
 B1  202306        0            202206      15         -100.000000000000000000 
 B1  202303        0            202203      11         -100.000000000000000000 
 B1  202212        0            202112      11         -100.000000000000000000 
 B1  202308        0            202208      23         -100.000000000000000000 
 B1  202304        0            202204      13         -100.000000000000000000 
 B1  202301        0            202201      11         -100.000000000000000000 
 B1  202302        0            202202      11         -100.000000000000000000 
 B1  202307        0            202207      22         -100.000000000000000000 
 B1  202309        0            202209      23         -100.000000000000000000 
 B1  202305        0            202205      14         -100.000000000000000000 

请参阅 db<>fiddle 处的运行示例。

© www.soinside.com 2019 - 2024. All rights reserved.