db2 sql求连续代发工资次数

今天遇到一个业务需求,要分析代发工资客户连续代发的最长次数,连续代发即连续每个月都有代发。
假设代发工资的表如下

create dfjl (
  work_dt varchar(8),
  id varchar(20),
  amount decimal(20,2)
)

其中work_dt表示代发日期,amount表示代发金额,id为代发客户证件号。
首先对dfjl表进行处理,按每个id每月进行汇总,保证每个id每月最多有一条记录。

  select
    id,
    date(left(work_dt,4)||'-'|| substr(work_dt,5,2) || '-01') as work_dt_new,
    sum(amount) as amount_tol
  from dfjl
  group by  id,
    date(left(work_dt,4)||'-'|| substr(work_dt,5,2) || '-01') 

以上代码将每个id每个月的代发金额进行汇总,并统一设置为月初第一天。假设经过上面处理过后的表为cte。

  select
  id,
  max(consecutive_counts) max_counts
  from
  (
    select
      id,
      drk,
      count(*) as consecutive_counts
    from
    (
      select
        id,
        work_dt_new,
        work_dt_new - INT(rank() over (partition by id order by workdate_dt_new) month drk
    from cte
    ) as t1
    group by id,drk
  ) as t2
  group by id

首先构造辅助列drk,如果某段时间有连续代发,则其drk应该是相同的,然后根据id和drk计算每组drk的连续代发次数,最后再通过max计算每个id的最长代发次数。以上代码在db2 数据库下可直接运行,其他数据库可自行修改。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容