首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Oracle,查找所有至少连续出现N次的数字

Oracle,查找所有至少连续出现N次的数字

作者头像
overme
发布2022-01-15 12:09:33
发布2022-01-15 12:09:33
2K00
代码可运行
举报
文章被收录于专栏:数据开发笔记数据开发笔记
运行总次数:0
代码可运行

OracleLeetCode

Oracle,查找所有至少连续出现N次的数字
起因

leetcode180 刷到Leetcode第180题.连续出现的数字

一开始看到题目的时候就觉得有见过类似场景,一下子想不起来,觉得跟我平常工作中的取开仓日很像,思索一会无思路,去看题解,发现大家用的是多表关联和lead聚合函数,无法复用决定研究。

测试数据
代码语言:javascript
代码运行次数:0
运行
复制
Create table  Logs (Id int, Num int);
Truncate table Logs;
insert into Logs (Id, Num) values ('1', '1');
insert into Logs (Id, Num) values ('2', '1');
insert into Logs (Id, Num) values ('3', '1');
insert into Logs (Id, Num) values ('4', '2');
insert into Logs (Id, Num) values ('5', '1');
insert into Logs (Id, Num) values ('6', '2');
insert into Logs (Id, Num) values ('7', '3');
insert into Logs (Id, Num) values ('8', '3');
insert into Logs (Id, Num) values ('9', '3');
insert into Logs (Id, Num) values ('10', '3');
commit;
开始

有个取巧的数学办法,用num来分组 组内排序一个id 叫r_sort

代码语言:javascript
代码运行次数:0
运行
复制
select t.id,
       t.num,
       ROW_NUMBER() over(partition by t.num order by t.id) as r_sort
from Logs t

如果num连续时 r_sort是递增的,id也是递增的 这时候相减就会得出一个相同的值

代码语言:javascript
代码运行次数:0
运行
复制
select t.id,
       t.num,
       ROW_NUMBER() over(partition by t.num order by t.id) as r_sort,
       t.id-ROW_NUMBER() over(partition by t.num order by t.id) as d_sort
from Logs t

当id-r_sort是相同时,说明数字递增,我只需要统计 id-r_sort的个数就可以了。

代码语言:javascript
代码运行次数:0
运行
复制
select t.num from (
select t.id,
       t.num,
       ROW_NUMBER() over(partition by t.num order by t.id) as r_sort,
       t.id-ROW_NUMBER() over(partition by t.num order by t.id) as d_sort
from Logs t) t
group by t.num,d_sort
having count(d_sort)>=3;

当统计连续的n个时,只需要把3改成n就可以了

代码语言:javascript
代码运行次数:0
运行
复制
select t.num from (
select t.id,
       t.num,
       ROW_NUMBER() over(partition by t.num order by t.id) as r_sort,
       t.id-ROW_NUMBER() over(partition by t.num order by t.id) as d_sort
from Logs t) t
group by t.num,d_sort
having count(d_sort)>=N;

本站文章除注明转载/出处外,均为本站原创,转载前请务必署名,转载请标明出处

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Oracle,查找所有至少连续出现N次的数字
    • 起因
    • 测试数据
    • 开始
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档