• hivesql连续日期统计最大逾期/未逾期案例


    1、虚表(测试表和数据) create test_table as

    select a.cust_no, a.r_date, a.yqts from  (

    select '123' as cust_no, '20231101' as r_date, 0 as yqts

    union all

    select '123' as cust_no, '20231102' as r_date, 1 as yqts

    union all

    select '123' as cust_no, '20231103' as r_date, 2 as yqts

    union all

    select '123' as cust_no, '20231104' as r_date, 3 as yqts

    union all

    select '123' as cust_no, '20231105' as r_date, 0 as yqts

    union all

    select '123' as cust_no, '20231106' as r_date, 0 as yqts

    union all

    select '123' as cust_no, '20231107' as r_date, 1 as yqts

    ) a

    2、加入有表test_table,数据如上,0标识未逾期,1标识逾期,求连续最大无逾期和逾期的天数,以上数据可直接看出最大连续逾期天数为3、未逾期未2。

    3、首先将测试数据排序,让数据连续

    select a.cust_no, a.r_date, a.yqts from test_table a where 1=1 order by a.cust_no, a.r_date asc

    4、将数据分组并给是否逾期打上标识1逾期,2未逾期,多行转一行

    select tx.cust_no, count(distinct tx.r_date) as sum_ctn, concat_ws('',collection_list(case when cast(tx.yqts as double) > 0 then '1' else '2' end)) as sfflag from (

    select a.cust_no, a.r_date, a.yqts from test_table a where 1=1 order by a.cust_no, a.r_date asc

    ) tx

    执行结果:

    cust_no        sum_ctn        sfflag

    123               7                    2111221

    5、使用正则表达式分别替换,2111221改字符串中包含逾期和未逾期,将逾期1*都用A替换掉(同时也是分割符),剩下就是未逾期的,逾期的同理

    select ty.cust_no, ty.sum_ctn, regexp_replace(ty.sfflag, '\2+', 'A') as yqflag, regexp_replace(ty.sfflag, '\1+', 'A') as wyqflag from (

    '123'  as cust_no         7    as sum_ctn      '2111221' as sfflag

    ) ty

    执行结果:

    cust_no        sum_ctn        yqflag        wyqflag

    123                7                  A111A1      2A22A

    6、使用炸裂函数explode结合lateral view将数据拆分未多行,使用一次lateral view会生成一次虚表

    select tz.cust_no, max(sum_ctn) as sum_ctn, max(length(yqlength)) as yqlength, max(length(wyqlength)) as wyqlength from (

    123  as cust_no     7 as sum_ctn      A111A1   as yqflag       2A22A as wyqflag

    ) tz

    lateral view explode(split(yqflag,'A')) tb1 as yqlength

    lateral view explode(split(wyqflag,'A')) tb2 as wyqlength

    group by tz.cust_no

  • 相关阅读:
    LeetCode [96] 不同的二叉搜索树
    Nomad 系列-安装
    Qt/QML学习-PathView
    在java的继承中你是否有这样的疑惑?
    25_ue4进阶末日生存游戏开发[行为树进阶]
    c++常用函数所在头文件一览
    webpack 的 Loader 和 Plugin 的区别,常见的 loader 和 plugin 有哪些?
    SAP替代物料的解决方案详解
    SAP MM学习笔记34 - 请求书照合中的支付保留(发票冻结)
    详解FreeRTOS:FreeRTOS任务恢复过程源码分析(进阶篇—4)
  • 原文地址:https://blog.csdn.net/wzc1991520/article/details/134393330