又做了一个很过瘾sql题

网友投稿 264 2022-08-24

又做了一个很过瘾sql题

作者:​​三十而立​​

一个很有趣的sql题 “超难SQL求助,对连续时间区域分组求和”

题目如下

模拟数据如下:  20090901    10  20090902    20  20090903    7  20090904    5  20090906    5  20090908    5  要求每相邻的两天作为一个单位统计,不能连续单天统计  结果如下  20090901+20090902  30  20090903+20090904  12  20090906+20090907  5  20090908+20090909  5

用户用相邻的时间来相加,注意,相邻但不一定是连续的时间。

这里连续记录分组,用oracle里的rownum处理就OK了,相加就用10g的新功能wmsys.wm_concat

得到一下sql

select trunc((rownum-1)/2) no, sum(n),         replace(wmsys.wm_concat(to_char(d,'yyyymmdd')),',','+') title        from        (select d, n from test_a order by d asc) t        group by trunc((rownum-1)/2)        order by trunc((rownum-1)/2)

实验一下哟。

数据

SQL> select n, to_char(d, 'yyyymmdd') d from test_a order by d asc;          N D---------- --------        12 20090901        14 20090902        14 20090903        11 20090906        12 20090907        13 20090908        14 20090909        15 20090910        16 20090911        17 20090912        18 20090913          N D---------- --------        19 20090914 已选择12行。

结果

SQL> select trunc((rownum-1)/2) no, sum(n),  replace(wmsys.wm_concat(to_char(d,' yyyymmdd')),',','+') title from (select d, n from test_a order by d asc) t group  by trunc((rownum-1)/2) order by trunc((rownum-1)/2);         NO     SUM(N) TITLE ---------- ---------- ------------------------------          0         26 20090901+20090902          1         25 20090903+20090906          2         25 20090907+20090908          3         29 20090909+20090910          4         33 20090911+20090912          5         37 20090913+20090914 已选择6行。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:sqlplus里的commit
下一篇:营销、门店、供应链全面对接,国美联手腾讯打造全零售生态!
相关文章

 发表评论

暂时没有评论,来抢沙发吧~