求一高效压缩存储的sql语句

[复制链接]
查看11 | 回复7 | 2011-11-1 16:21:15 | 显示全部楼层 |阅读模式
只要连续的月份,用开始和结束期来标识。
样例sql。
with t as (
select '100' a, '201312' b from dual
union all
select '100' a, '201401' b from dual
union all
select '100' a, '201402' b from dual
union all
select '100' a, '201405' b from dual
union all
select '200' a, '201404' b from dual
union all
select '200' a, '201405' b from dual
union all
select '200' a, '201406' b from dual
)
select * from t;
期望结果
a b
100 201312-201402,201405
200 201401-201406

回复

使用道具 举报

千问 | 2011-11-1 16:21:15 | 显示全部楼层
查看野花连续号段贴
回复

使用道具 举报

千问 | 2011-11-1 16:21:15 | 显示全部楼层


代码如下, 如果是10g以上的版本, 用listagg来替换如下的wmsys.wm_concat

SQL> with t as (
2select '100' a, '201312' b from dual
3union all
4select '100' a, '201401' b from dual
5union all
6select '100' a, '201402' b from dual
7union all
8select '100' a, '201405' b from dual
9union all
10select '200' a, '201404' b from dual
11union all
12select '200' a, '201405' b from dual
13union all
14select '200' a, '201406' b from dual
15)
16selecta,
17
max(b) b
18from
19(select a,
20
wmsys.wm_concat(decode(count(*), 1, max(b), min(b) || '-' || max(b))) over(partition by a order by rn) b
21from
22(select a,
23
b,
24
max(rn) over(partition by a order by to_date(b, 'YYYYMM')) rn
25from
26(select a,
27
b,
28
case
29
when months_between(to_date(b, 'YYYYMM'), lag(to_date(b, 'YYYYMM')) over(partition by a order by to_date(b, 'YYYYMM'))) = 1 then
30
0
31
else
32
row_number() over(partition by a order by to_date(b, 'YYYYMM'))
33
end rn
34from t))
35group by a, rn)
36group by a;
A B
--- --------------------------------------------------------------------------------
100 201312-201402,201405
200 201404-201406
SQL>


回复

使用道具 举报

千问 | 2011-11-1 16:21:15 | 显示全部楼层
主要还是看lag的
回复

使用道具 举报

千问 | 2011-11-1 16:21:15 | 显示全部楼层
bell6248 发表于 2014-9-10 09:52
代码如下, 如果是10g以上的版本, 用listagg来替换如下的wmsys.wm_concat

10g以上版本,为什么要替换?
回复

使用道具 举报

千问 | 2011-11-1 16:21:15 | 显示全部楼层
10g以上WM_CONCAT已不可用
回复

使用道具 举报

千问 | 2011-11-1 16:21:15 | 显示全部楼层
visual2006 发表于 2014-9-10 10:49
10g以上WM_CONCAT已不可用

12c才彻底不能用
从10g某个版本开始变成clob类型
回复

使用道具 举报

千问 | 2011-11-1 16:21:15 | 显示全部楼层
FYI: http://www.itpub.net/thread-719692-1-1.html
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行