免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4207 | 回复: 1
打印 上一主题 下一主题

[求助] oracle表中相邻行分组问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2017-02-22 23:06 |只看该作者 |倒序浏览
本帖最后由 leechee12 于 2017-02-22 23:35 编辑

oracle提取数据时遇到一个分组问题,尝试了很久也没有解决办法。如有以下表table_abc,表中有name、orderid和date字段。
rn列是我根据name进行分组,date进行倒序的结果,rn2是我根据name和orderid进行分组,date进行倒序的结果。
但是没有达到我想要的结果,我想只对在rn顺序的基础上,对彼此相邻的相同的name和orderid进行分组排序。

name         orderid            date                rn      rn2  
aaaaa        33333333        20161127        1        1
aaaaa        33333333        20151127        2        2
bbbbb        55555555        20170118        1        1
bbbbb        55555555        20170117        2        2
bbbbb        77777777        20161018        3        1
cccccc        88888888        20171123        1        1
cccccc        88888888        20160123        2        2
cccccc        88888888        20151123        3        3
cccccc        99999999        20141123        4        1
cccccc        88888888        20131123        5        4
cccccc        88888888        20121123        6        5

也就是表中以下两部分应该是独立排列的,最后两行的rn2应该为1和2.
cccccc        88888888        20171123        1        1
cccccc        88888888        20160123        2        2
cccccc        88888888        20151123        3        3

-------------------------------------------
cccccc        88888888        20131123        5        1
cccccc        88888888        20121123        6        2

具体sql怎么写,才能在大数据量的情况下高效率的得出结果呢?



论坛徽章:
0
2 [报告]
发表于 2017-02-22 23:58 |只看该作者
本帖最后由 leechee12 于 2017-02-22 23:59 编辑
  1. name             orderid           date                 rn      rn1  rn2  rn2-rn1  rn3
复制代码
参考网上得到一种解法,先列出以name和orderid作为partition的rn1顺序下的序号rn2,再列出rn2-rn1的值,
再以name、orderid和rn2-rn1作为partition进行排列,得到rn3,即为想要的结果。
不知道还有没有其他更好的办法呢。。。
name             orderid              date                 rn       rn1    rn2  rn2-rn1   rn3
aaaaa            33333333          20161127          1           1     1      0      1
aaaaa            33333333          20151127          2           2     2      0      2
bbbbb            55555555          20170118          1           1     3      2      1
bbbbb            55555555          20170117          2           2     4      2      2
bbbbb            77777777          20161018          3           1     5      4      1
ccccc            88888888           20171123          1           1     6      5      1
ccccc            88888888           20160123          2           2     7      5      2
ccccc            88888888           20151123          3           3     8      5      3
ccccc            99999999          20141123          4           1     9      8      1
ccccc            88888888          20131123          5           4     10     6      1
ccccc            88888888          20121123          6           5     11     6      2


您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP