Oracle 统计连续天数

求Oracle 统计连续天数查询语句
样表如下:
NAME   RQ
A001    2020-01-01
A001    2020-01-02    
A001    2020-01-05
A001    2020-01-06

A001    2020-01-07

B001    2020-01-01
B001    2020-01-02

B001    2020-01-03

B001    2020-01-04

B001    2020-01-06

想实现查询结果为:
NAME    连续天数
A001       2
A001       3
B001       4
B001       1

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

这是一个非常经典的数据工程师面试题~需要利用到开窗函数和辅助列~我就不写了!给你思路自己研究研究~


1先按name开窗,给日期排序~给出序号值(辅助列)rw


2再用rq-辅助列值等到一个新的日期值re_rq


3再用rq-re_rq得到另外一个新值列now_2


4再按name,now_2分组求count(1) as now_3


5最后 按name分组求max(now_3)







最佳回答
0
jie.deng02Lv6见习互助
发布于2020-3-18 14:43
按照日期排序编号NAME   RQ
取后面两位日期后面两位日期减去序号后两位日期减去序号值相等的为连续,不等的为不连续然后计算个数
1A001    2020-01-01
102
2A001    2020-01-02    
20
3A001    2020-01-05
523
4A001    2020-01-06
62
5A001    2020-01-07
72
6B001    2020-01-01
1-54
7B001    2020-01-02
2-5
8B001    2020-01-03
3-5
9B001    2020-01-04
4-5
10B001    2020-01-06
6-41


最佳回答
0
孤陌Lv6资深互助
发布于2020-3-18 14:45
最佳回答
0
cherry团子Lv6中级互助
发布于2020-3-18 15:45
SELECT  DISTINCT  NAME
      ,COUNT(*) OVER (PARTITION BY  NAME,B ) AS C 
FROM (
SELECT A,NAME,RQ,RQ1,RQ1-A AS B 
FROM (
SELECT ROW_NUMBER() OVER( ORDER BY NAME,RQ ) AS A 
,NAME,RQ,SUBSTR(RQ,9) AS RQ1
FROM NT
)
)

我就做个标记,实践一下,记录下


最佳回答
0
x15855242328Lv4见习互助
发布于2020-3-20 17:10

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


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