前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ORACLE取出连续区间

ORACLE取出连续区间

作者头像
overme
发布2022-01-17 08:04:56
4250
发布2022-01-17 08:04:56
举报
文章被收录于专栏:数据开发笔记

Oracle

场景

这个其实是之前那个连续N次数字题的小拓展。用在连续签到天数的开始结束区间和天数,也可以用在连续达标、连续正常考勤、连续超出预警天数等场景。

开始

这是一张交易日历表,我现在为了转换成各个区间,先把连续的日期给区分出来,用上次文章说的ROWNUM-ROW_NUMBER()来计算

代码语言:javascript
复制
SELECT T.CAL_DAY,
       T.FLAG,
       ROWNUM AS RN,
       ROW_NUMBER() OVER(PARTITION BY T.FLAG ORDER BY T.CAL_DAY) AS SN,
       ROWNUM - ROW_NUMBER() OVER(PARTITION BY T.FLAG ORDER BY T.CAL_DAY) AS QJ
FROM TEST_GROUP T
ORDER BY T.CAL_DAY

这里FLAG、QJ相同的值表示为同一个连续区间。如果只是QJ相同是不足够判断的,比如下图:

接下来我们只需要对QJ字段进行GROUP BY分组聚合即可

代码语言:javascript
复制
SELECT MIN(T.CAL_DAY) AS BEG_DATE,
       MAX(T.CAL_DAY) AS END_DATE,
       T.FLAG,
       COUNT(1) AS "连续天数"
FROM (SELECT T.CAL_DAY,
             T.FLAG,
             ROWNUM AS RN,
             ROWNUM - ROW_NUMBER() OVER(PARTITION BY T.FLAG ORDER BY T.CAL_DAY) AS QJ
      FROM TEST_GROUP T) T
GROUP BY T.FLAG
         T.QJ
ORDER BY 1;
代码语言:txt
复制
         本站文章除注明转载/出处外,均为本站原创,转载前请务必署名,转载请标明出处

最后编辑时间为: 2021/12/27 17:11:43

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/12/27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 场景
  • 开始
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档