Oracle 定长范围分组统计
2013-11-21 13:20
232 查看
WITH T AS (
SELECT 1 as N FROM DUAL UNION ALL
SELECT 3 N FROM DUAL UNION ALL
SELECT 4 N FROM DUAL UNION ALL
SELECT 7 N FROM DUAL UNION ALL
SELECT 10 N FROM DUAL UNION ALL
SELECT 11 N FROM DUAL UNION ALL
SELECT 12 N FROM DUAL UNION ALL
SELECT 12 N FROM DUAL UNION ALL
SELECT 19 N FROM DUAL UNION ALL
SELECT 20 N FROM DUAL
)
select n, row_number() over(order by n) rn from T;
N RN
------- ----------
1 1
3 2
4 3
7 4
10 5
11 6
12 7
12 8
19 9
20 10
WITH T AS (
SELECT 1 N FROM DUAL UNION ALL
SELECT 3 N FROM DUAL UNION ALL
SELECT 4 N FROM DUAL UNION ALL
SELECT 7 N FROM DUAL UNION ALL
SELECT 10 N FROM DUAL UNION ALL
SELECT 11 N FROM DUAL UNION ALL
SELECT 12 N FROM DUAL UNION ALL
SELECT 12 N FROM DUAL UNION ALL
SELECT 19 N FROM DUAL UNION ALL
SELECT 20 N FROM DUAL
),v as (
select n, row_number() over(order by n) rn from t
),v1 (flag,n,rn) as (
select n,n,rn from v where rn = 1
union all
select case when v.n - v1.flag >= 5 then v.n else v1.flag end,
v.n,
v.rn
from v, v1
where v.rn = v1.rn + 1
)
select * from v1;
FLAG N RN
-------- ---------- ----------
1 1 1
1 3 2
1 4 3
7 7 4
7 10 5
7 11 6
12 12 7
12 12 8
19 19 9
19 20 10
create table DEP
( DEPID number(10) not null,
DEPNAME varchar2(256),
UPPERDEPID number(10)
)
INSERT INTO DEP(DEPID, DEPNAME, UPPERDEPID) VALUES (0, '总经办', null);
INSERT INTO DEP(DEPID, DEPNAME, UPPERDEPID) VALUES (1, '开发部', 0);
INSERT INTO DEP(DEPID, DEPNAME, UPPERDEPID) VALUES (2, '测试部', 0);
INSERT INTO DEP(DEPID, DEPNAME, UPPERDEPID) VALUES (3, 'Sever开发部', 1);
INSERT INTO DEP(DEPID, DEPNAME, UPPERDEPID) VALUES (4, 'Client开发部', 1);
INSERT INTO DEP(DEPID, DEPNAME, UPPERDEPID) VALUES (5, 'TA测试部', 2);
INSERT INTO DEP(DEPID, DEPNAME, UPPERDEPID) VALUES (6, '项目测试部', 2);
commit;
SELECT RPAD(' ', 2*(LEVEL-1),'-') || DEPNAME "DEPNAME",
CONNECT_BY_ROOT depname "ROOT",
CONNECT_BY_ISLEAF "ISLEAF",
LEVEL,
SYS_CONNECT_BY_PATH(DEPNAME, '/') "PATH"
FROM DEP
START WITH depid=0
CONNECT BY PRIOR DEPID = UPPERDEPID;
SELECT 1 as N FROM DUAL UNION ALL
SELECT 3 N FROM DUAL UNION ALL
SELECT 4 N FROM DUAL UNION ALL
SELECT 7 N FROM DUAL UNION ALL
SELECT 10 N FROM DUAL UNION ALL
SELECT 11 N FROM DUAL UNION ALL
SELECT 12 N FROM DUAL UNION ALL
SELECT 12 N FROM DUAL UNION ALL
SELECT 19 N FROM DUAL UNION ALL
SELECT 20 N FROM DUAL
)
select n, row_number() over(order by n) rn from T;
N RN
------- ----------
1 1
3 2
4 3
7 4
10 5
11 6
12 7
12 8
19 9
20 10
WITH T AS (
SELECT 1 N FROM DUAL UNION ALL
SELECT 3 N FROM DUAL UNION ALL
SELECT 4 N FROM DUAL UNION ALL
SELECT 7 N FROM DUAL UNION ALL
SELECT 10 N FROM DUAL UNION ALL
SELECT 11 N FROM DUAL UNION ALL
SELECT 12 N FROM DUAL UNION ALL
SELECT 12 N FROM DUAL UNION ALL
SELECT 19 N FROM DUAL UNION ALL
SELECT 20 N FROM DUAL
),v as (
select n, row_number() over(order by n) rn from t
),v1 (flag,n,rn) as (
select n,n,rn from v where rn = 1
union all
select case when v.n - v1.flag >= 5 then v.n else v1.flag end,
v.n,
v.rn
from v, v1
where v.rn = v1.rn + 1
)
select * from v1;
FLAG N RN
-------- ---------- ----------
1 1 1
1 3 2
1 4 3
7 7 4
7 10 5
7 11 6
12 12 7
12 12 8
19 19 9
19 20 10
create table DEP
( DEPID number(10) not null,
DEPNAME varchar2(256),
UPPERDEPID number(10)
)
INSERT INTO DEP(DEPID, DEPNAME, UPPERDEPID) VALUES (0, '总经办', null);
INSERT INTO DEP(DEPID, DEPNAME, UPPERDEPID) VALUES (1, '开发部', 0);
INSERT INTO DEP(DEPID, DEPNAME, UPPERDEPID) VALUES (2, '测试部', 0);
INSERT INTO DEP(DEPID, DEPNAME, UPPERDEPID) VALUES (3, 'Sever开发部', 1);
INSERT INTO DEP(DEPID, DEPNAME, UPPERDEPID) VALUES (4, 'Client开发部', 1);
INSERT INTO DEP(DEPID, DEPNAME, UPPERDEPID) VALUES (5, 'TA测试部', 2);
INSERT INTO DEP(DEPID, DEPNAME, UPPERDEPID) VALUES (6, '项目测试部', 2);
commit;
SELECT RPAD(' ', 2*(LEVEL-1),'-') || DEPNAME "DEPNAME",
CONNECT_BY_ROOT depname "ROOT",
CONNECT_BY_ISLEAF "ISLEAF",
LEVEL,
SYS_CONNECT_BY_PATH(DEPNAME, '/') "PATH"
FROM DEP
START WITH depid=0
CONNECT BY PRIOR DEPID = UPPERDEPID;
相关文章推荐
- Window7 x64环境下 SSIS无法通过Oracle 64位建立连接
- 【Oracle】Oracle-Linux下数据导出脚本实现(四)
- 查看修改oracle最大并发
- 【Oracle】Oracle-Linux下导出、导入数据库命令实现(三)
- Oracle 通用补丁安装操作手册
- oracle hints
- 【Oracle】Oracle-如何处理被锁资源(二)
- 【Oracle】Oracle-Linux下创建Oracle新用户(一)
- Oracle adf af:table can not scroll page
- Oracle基础知识(十四) - 单引号和双引号
- 查看ORACLE数据库信息的一些SQL
- Oracle job procedure 存储过程定时任务
- Oracle job procedure 存储过程定时任务
- 使用rownum对oracle结果集快速分页的sql
- oracle 学习笔记(十一) 数据库常用对象, table ,constraint ,index ,view和数据字典
- Linux下让Oracle服务自动启动与停止
- Oracle创建自增字段方法-ORACLE SEQUENCE的简单介绍
- linux下启动oracle
- Oracle cursor的用法.
- linux下oracle 操作