计算最高逾期、当前逾期、累计逾期

最近接到需要要求算:最高逾期、当前逾期、累计逾期,这个三个思考了一天并求教大神才想到解决办法,分享给大家;
首先,我们要了解这三个字段的概念;
当前逾期期数:已经逾期,而且现在还没还清的信用卡或贷款的期数(也是一个连续的概念)
累计逾期期数:已经逾期的期数总数;
最高逾期期数:逾期时间最长的连续期数;
数据准备:
 
 
合同号期次是否逾期 (1:逾期;0:未逾期)
con_noterm_noIF_DUR_TERM
00110
00120
00131
00141
00151
00161
00170
00180
00191
001101
001111
001121
001131
001141
001151
001160
001170
001181
1.当前逾期期数:
SELECT seg + 1 AS CURTERMSPASTDUE
                  ,con_no   
            FROM   (SELECT con_no
                          
                          ,to_number(term_no) - rn AS term
                          ,MIN(to_number(term_no)) AS start_term
                          ,MAX(to_number(term_no)) AS end_term
                          ,MAX(to_number(term_no)) - MIN(to_number(term_no)) AS seg
                    FROM   (SELECT t.*
                                  ,row_number() over(PARTITION BY con_no, IF_DUR_TERM ORDER BY to_number(term_no)) AS rn
                            FROM   W_TAB_LOAN_AMT t
                            WHERE  IF_DUR_TERM = 1
                            AND    REPAY_DATE <=v_etl_date)
                    GROUP  BY to_number(term_no) - rn
                             ,con_no
                             )
           where (end_term,con_no )   IN (
                            SELECT MAX(term_no) as end_term,con_no
                            FROM   W_TAB_LOAN_AMT
                            WHERE  REPAY_DATE = v_etl_date
                            AND    IF_DUR_TERM =1
                            group by con_no
            
            )  
--如果这段sql取不出数,就是0 
2.累计逾期期数:
直接 sum(case when IF_DUR_TERM =1 then 1 else NULL end )
3.最高逾期期数
 SELECT MAX(seg) + 1 AS maxtermspastdue
                  ,con_no  
            FROM   (SELECT con_no
                          ,to_number(term_no) - rn AS term
                          ,MIN(to_number(term_no)) AS start_term
                          ,MAX(to_number(term_no)) AS end_term
                          ,MAX(to_number(term_no)) - MIN(to_number(term_no)) AS seg
                    FROM   (SELECT t.*
                                  ,row_number() over(PARTITION BY con_no,IF_DUR_TERM ORDER BY to_number(term_no)) AS rn
                            FROM   W_TAB_LOAN_AMT t
                            WHERE  IF_DUR_TERM = 1
                            )
                    GROUP  BY to_number(term_no) - rn
                             ,con_no
                             
              )
            GROUP  BY con_no
  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值