Oracle连续天数

样表如下:

NAME   RQ

A001    2020-01-01

A001    2020-01-02    

A001    2020-01-05

A001    2020-01-06

B001    2020-01-01

B001    2020-01-02

B001    2020-01-03

B001    2020-01-05


想实现效果:


NAME    开始日期              结束日期          连续天数    

A001      2020-01-01        2020-01-02          2

A001      2020-01-05        2020-01-06          2

B001      2020-01-01        2020-01-03          3

B001      2020-01-05        2020-01-05          1


sbeg571 发布于 2020-3-20 15:47
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共4回答
最佳回答
1
x15855242328Lv4见习互助
发布于2020-3-20 17:14

image.png

select distinct name,min(rq) ksrq,max(rq) jsrq,count(*) cs

from

(

SELECT NAME,RQ,XH,to_char(to_date(rq,'yyyy-mm-dd')-xh,'yyyy-mm-dd') rq2

FROM

(

SELECT NAME,RQ,ROW_NUMBER()OVER(PARTITION BY NAME ORDER BY RQ) XH

FROM TEST20200319

)

)

group by name,rq2


最佳回答
0
cxyangLv5初级互助
发布于2020-3-20 15:59

你这个是根据什么来区分开始日期和结束日期的?

最佳回答
0
qq1320929786Lv6初级互助
发布于2020-3-20 15:59

之前有一个和你问一样的问题,这里有人介绍了方法

https://bbs.fanruan.com/wenda/question/24877.html

最佳回答
0
ooshanghaiLv5初级互助
发布于2020-3-20 17:22

这个建议用finebi来做模型,类似会员的留存度,通过新增列来实现

新增列的时候判断是否为同组最后一行,同组最后一行肯定是RQ2,同组第一行肯定是RQ1,   中间的部分判断间隔是否为1,间隔大于1的再做区分首尾,这样三四个新增列之后,再通过过滤,就可以得出最后的结果。

  • 5关注人数
  • 553浏览人数
  • 最后回答于:2020-3-20 17:22
    请选择关闭问题的原因
    确定 取消
    返回顶部