ORACLE 判断连续几日统计方法

在数据加工过程中经常需要统计连续几日的数据,普通方法较为繁琐,需要判断每一天的前一天与后一天是否是连续的,下面介绍一种通过观察连续数据特点得到的计算连续天数的计算方法。

初始数据如下图:

现需要将每一个XFSBH在相同的KPYF中KPRQ连续三天或三天以上存在记录的数据找出来 ,SQL如下:

SELECT *
  FROM (SELECT FPDM,
               FPHM,
               XFSBH,
               KPYF,
               KPRQ,
               JE,
               RN,
               KPRQ + RN,
               COUNT(DISTINCT KPRQ) OVER(PARTITION BY XFSBH, KPRQ + RN) LXKPTS
          FROM (SELECT FPDM,
                       FPHM,
                       XFSBH,
                       KPYF,
                       KPRQ,
                       JE,
                       DENSE_RANK() OVER(PARTITION BY XFSBH, KPYF ORDER BY KPRQ DESC) RN
                  FROM ABC T))
 WHERE LXKPTS >= 3;

该sql的查询结果如下图所示:

计算思路如下:

1、首先按照XFSBH,KPYF分组并对KPRQ进行降序排列

2、利用连续的KPRQ与 降序排列的序号相加的结果都相等的原理计算连续日期的最后一天,即KPRQ+RN字段

3、按照XFSBH,KPRQ+RN分组并计算每组数据中不同KPRQ的数量,结果(LXKPTS)即为连续的天数

为便于理解,下图放出筛选大于等于3天之前数据全貌:

 

 

  • 5
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值