求最大公串

menper 2017-02-10 02:14:52
有一段乐谱字串如下:
1265535165656312653126312312
用sql怎样能快事找到预先指定的n位的出现次数最多的字串,如n=3时,
结果为312。
因实际数据量很大,故要考虑效率问题,使用穷举不可行,求教!
...全文
390 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
POM_24 2017-02-13
  • 打赏
  • 举报
回复
[quote=引用 7 楼 menper 的回复:] 但拆分后怎么处理呢?另外有无数个这种字串,全部变成列吗,不可行吧? 拆分后是行存放的,字符串最大长度才8000了,也就是最多8000行,拆分后再操作,没有难度的。
尘世流年 2017-02-11
  • 打赏
  • 举报
回复
with t1 as
 (select '1265535165656312653126312312' c1 from dual)
, t2 as(select  substr(c1, level, 3) s, regexp_count(c1, substr(c1, level, 3)) c from t1
connect by level <= length(c1) - 2 order by c desc)
select * from t2 where rownum=1;
menper 2017-02-10
  • 打赏
  • 举报
回复
但拆分后怎么处理呢?另外有无数个这种字串,全部变成列吗,不可行吧?
引用 6 楼 POM_24 的回复:
不说n=3了,就说n=1找最大值,那也是要拆分的。这样的字符串出现在数据库内的一个字段内不拆开成若干个字段,什么算法也不好使; 拆分肯定会影响效率的。
POM_24 2017-02-10
  • 打赏
  • 举报
回复
不说n=3了,就说n=1找最大值,那也是要拆分的。这样的字符串出现在数据库内的一个字段内不拆开成若干个字段,什么算法也不好使; 拆分肯定会影响效率的。
menper 2017-02-10
  • 打赏
  • 举报
回复
原来有高手指点过找最长累坏字符串的算法,但不知道能否应用到我提的这个问题中,如下,基本思路就是划如下表格,标颜色的部分比较一下,效率奇高!求高手指教!
menper 2017-02-10
  • 打赏
  • 举报
回复
还是感谢了,但效率可能有问题。
引用 2 楼 zbdzjx 的回复:
这应该也算是穷举法了吧。其他的就想不到了。
with t1 as
(select '1265535165656312653126312312' c1 from dual)
, t2 as
(select rownum rn from dual connect by rownum<=(select length(c1)-2 from t1))
select * from (
  select substr(c1, rn, 3) s, count(*) c 
  from t1, t2 
  group by substr(c1, rn, 3) 
  order by count(*) desc
) aa 
where rownum=1 
menper 2017-02-10
  • 打赏
  • 举报
回复
是啊,穷举效率有些问题,不好弄。 另外用程序处理也存在效率问题,没想到好的算法啊
zbdzjx 2017-02-10
  • 打赏
  • 举报
回复
这应该也算是穷举法了吧。其他的就想不到了。
with t1 as
(select '1265535165656312653126312312' c1 from dual)
, t2 as
(select rownum rn from dual connect by rownum<=(select length(c1)-2 from t1))
select * from (
  select substr(c1, rn, 3) s, count(*) c 
  from t1, t2 
  group by substr(c1, rn, 3) 
  order by count(*) desc
) aa 
where rownum=1 
Diza1986 2017-02-10
  • 打赏
  • 举报
回复
麻烦啊,别用sql了吧,取出来用python java 什么的,感觉可行性大一些, 等大神来吧

3,499

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧