查找某张表中未使用到的连续数值
2015-03-19 17:02
148 查看
SELECT * FROM HXL_CL_ZH_20150108
select 1106.99 * 8 / 1024 MB FROM dual;
SELECT 18633.78 * 26796 FROM dual;
--分析数据
WITH T AS (
SELECT 12340000 beg,12349999 end_n FROM dual UNION ALL
SELECT 12340011,12340011 FROM dual UNION ALL
SELECT 12340012,12340012 FROM dual UNION ALL
SELECT 12340100,12349999 FROM dual UNION ALL
SELECT 12340016,12340019 FROM dual UNION ALL
SELECT 12340021,12340025 FROM dual
),
t1 AS (
SELECT t.beg,t.end_n,
LEAD(t.beg,1,t.end_n)OVER(ORDER BY t.beg) beg_2,
MAX(t.end_n)OVER(ORDER BY t.beg) end_2
FROM t ORDER BY beg
)
SELECT * FROM t1;
--最终结果
WITH T AS (
SELECT 12340000 beg,12349999 end_n FROM dual UNION ALL
SELECT 12340011,12340011 FROM dual UNION ALL
SELECT 12340012,12340012 FROM dual UNION ALL
SELECT 12340100,12349999 FROM dual UNION ALL
SELECT 12340016,12340019 FROM dual UNION ALL
SELECT 12340021,12340025 FROM dual
),
t1 AS (
SELECT t.beg,t.end_n,
LEAD(t.beg,1,t.end_n)OVER(ORDER BY t.beg) beg_2,
MAX(t.end_n)OVER(ORDER BY t.beg) end_2
FROM t ORDER BY beg
),
t2 AS (
SELECT t1.beg,CASE WHEN t1.end_n > t1.beg_2 THEN t1.beg_2-1 ELSE end_n END end_n FROM t1 UNION
--SELECT t1.beg_2+1,t1.end_2 FROM t1 WHERE t1.end_n = t1.beg_2 UNION
SELECT t1.end_n+1,t1.beg_2-1 FROM t1 WHERE t1.end_n+1 <= t1.beg_2-1
)
SELECT * FROM t2 ORDER BY beg;
---
--分析数据
WITH T AS (
select 11330000 beg,11339999 end_n from dual union all
select 12340000 begin_msisdn,12349999 end_msisdn from dual union all
select 12350000 begin_msisdn,12359999 end_msisdn from dual union all
select 12360000 begin_msisdn,12369999 end_msisdn from dual union all
select 14000000 begin_msisdn,14009999 end_msisdn from dual UNION ALL
select 12340011 begin_msisdn, 12340011 end_msisdn from dual union all
select 12340012 begin_msisdn, 12340012 end_msisdn from dual union all
select 12360101 begin_msisdn, 12360101 end_msisdn from dual union all
select 12360012 begin_msisdn, 12360012 end_msisdn from dual union all
select 12360013 begin_msisdn, 12360013 end_msisdn from dual union all
select 12390100 begin_msisdn, 12390100 end_msisdn from dual
),
t1 AS (
SELECT t.beg,t.end_n,
LEAD(t.beg,1,t.end_n)OVER(ORDER BY t.beg) beg_2,
MAX(t.end_n)OVER(ORDER BY t.beg) end_2
FROM t ORDER BY beg
)
SELECT * FROM t1;
WITH t AS (
select 11330000 beg,11339999 end_n from dual union all
select 12340000 begin_msisdn,12349999 end_msisdn from dual union all
select 12350000 begin_msisdn,12359999 end_msisdn from dual union all
select 12360000 begin_msisdn,12369999 end_msisdn from dual union all
select 14000000 begin_msisdn,14009999 end_msisdn from dual UNION ALL
select 12340011 begin_msisdn, 12340011 end_msisdn from dual union all
select 12340012 begin_msisdn, 12340012 end_msisdn from dual union all
select 12360101 begin_msisdn, 12360101 end_msisdn from dual union all
select 12360012 begin_msisdn, 12360012 end_msisdn from dual union all
select 12360013 begin_msisdn, 12360013 end_msisdn from dual union all
select 12390100 begin_msisdn, 12390100 end_msisdn from dual
),
t1 AS (
SELECT t.beg,t.end_n,
LEAD(t.beg,1,t.end_n)OVER(ORDER BY t.beg) beg_2,
MAX(t.end_n)OVER(ORDER BY t.beg) end_2
FROM t ORDER BY beg
),
t2 AS (
SELECT t1.beg,CASE WHEN t1.end_n > t1.beg_2 THEN t1.beg_2-1 ELSE end_n END end_n FROM t1 UNION
SELECT t1.end_n+1,t1.beg_2-1 FROM t1 WHERE t1.end_n+1 <= t1.beg_2-1
)
SELECT * FROM t2 --WHERE FLOOR(beg/10000) = FLOOR(end_n/10000)
ORDER BY beg;
select 1106.99 * 8 / 1024 MB FROM dual;
SELECT 18633.78 * 26796 FROM dual;
--分析数据
WITH T AS (
SELECT 12340000 beg,12349999 end_n FROM dual UNION ALL
SELECT 12340011,12340011 FROM dual UNION ALL
SELECT 12340012,12340012 FROM dual UNION ALL
SELECT 12340100,12349999 FROM dual UNION ALL
SELECT 12340016,12340019 FROM dual UNION ALL
SELECT 12340021,12340025 FROM dual
),
t1 AS (
SELECT t.beg,t.end_n,
LEAD(t.beg,1,t.end_n)OVER(ORDER BY t.beg) beg_2,
MAX(t.end_n)OVER(ORDER BY t.beg) end_2
FROM t ORDER BY beg
)
SELECT * FROM t1;
--最终结果
WITH T AS (
SELECT 12340000 beg,12349999 end_n FROM dual UNION ALL
SELECT 12340011,12340011 FROM dual UNION ALL
SELECT 12340012,12340012 FROM dual UNION ALL
SELECT 12340100,12349999 FROM dual UNION ALL
SELECT 12340016,12340019 FROM dual UNION ALL
SELECT 12340021,12340025 FROM dual
),
t1 AS (
SELECT t.beg,t.end_n,
LEAD(t.beg,1,t.end_n)OVER(ORDER BY t.beg) beg_2,
MAX(t.end_n)OVER(ORDER BY t.beg) end_2
FROM t ORDER BY beg
),
t2 AS (
SELECT t1.beg,CASE WHEN t1.end_n > t1.beg_2 THEN t1.beg_2-1 ELSE end_n END end_n FROM t1 UNION
--SELECT t1.beg_2+1,t1.end_2 FROM t1 WHERE t1.end_n = t1.beg_2 UNION
SELECT t1.end_n+1,t1.beg_2-1 FROM t1 WHERE t1.end_n+1 <= t1.beg_2-1
)
SELECT * FROM t2 ORDER BY beg;
---
--分析数据
WITH T AS (
select 11330000 beg,11339999 end_n from dual union all
select 12340000 begin_msisdn,12349999 end_msisdn from dual union all
select 12350000 begin_msisdn,12359999 end_msisdn from dual union all
select 12360000 begin_msisdn,12369999 end_msisdn from dual union all
select 14000000 begin_msisdn,14009999 end_msisdn from dual UNION ALL
select 12340011 begin_msisdn, 12340011 end_msisdn from dual union all
select 12340012 begin_msisdn, 12340012 end_msisdn from dual union all
select 12360101 begin_msisdn, 12360101 end_msisdn from dual union all
select 12360012 begin_msisdn, 12360012 end_msisdn from dual union all
select 12360013 begin_msisdn, 12360013 end_msisdn from dual union all
select 12390100 begin_msisdn, 12390100 end_msisdn from dual
),
t1 AS (
SELECT t.beg,t.end_n,
LEAD(t.beg,1,t.end_n)OVER(ORDER BY t.beg) beg_2,
MAX(t.end_n)OVER(ORDER BY t.beg) end_2
FROM t ORDER BY beg
)
SELECT * FROM t1;
WITH t AS (
select 11330000 beg,11339999 end_n from dual union all
select 12340000 begin_msisdn,12349999 end_msisdn from dual union all
select 12350000 begin_msisdn,12359999 end_msisdn from dual union all
select 12360000 begin_msisdn,12369999 end_msisdn from dual union all
select 14000000 begin_msisdn,14009999 end_msisdn from dual UNION ALL
select 12340011 begin_msisdn, 12340011 end_msisdn from dual union all
select 12340012 begin_msisdn, 12340012 end_msisdn from dual union all
select 12360101 begin_msisdn, 12360101 end_msisdn from dual union all
select 12360012 begin_msisdn, 12360012 end_msisdn from dual union all
select 12360013 begin_msisdn, 12360013 end_msisdn from dual union all
select 12390100 begin_msisdn, 12390100 end_msisdn from dual
),
t1 AS (
SELECT t.beg,t.end_n,
LEAD(t.beg,1,t.end_n)OVER(ORDER BY t.beg) beg_2,
MAX(t.end_n)OVER(ORDER BY t.beg) end_2
FROM t ORDER BY beg
),
t2 AS (
SELECT t1.beg,CASE WHEN t1.end_n > t1.beg_2 THEN t1.beg_2-1 ELSE end_n END end_n FROM t1 UNION
SELECT t1.end_n+1,t1.beg_2-1 FROM t1 WHERE t1.end_n+1 <= t1.beg_2-1
)
SELECT * FROM t2 --WHERE FLOOR(beg/10000) = FLOOR(end_n/10000)
ORDER BY beg;
相关文章推荐
- DB2中如何使用SQL查找非连续数值
- EXCEL Match 函数使用方法--数值匹配查找
- 程序员面试题目总结--数组(二)【二分查找、找出给定数字出现次数、两个有序整型数组交集、找出数组中唯一的重复元素、判断数组中的数值是否连续相邻】
- 使用ASCAN来查找数组数据
- 在linux下使用用Valgrind查找内存泄漏和无效内存访问(转载)
- 在 Web 页上使用条件数值格式
- 使用exception来查找重复的数据
- debian-vi使用(查找,替换,环境设置)
- 使用ROWID查找和删除重复行
- Castle AR 使用 Nullables 支持初态为 null 的数值属性
- 如何使用FindControl查找内容页上的某个控件
- 如何查找和使用 Office 对象模型文档
- 如何使用FindControl查找内容页上的某个控件?
- 哈希查找因何快?我们使用它需要付出什么代价
- 使用gprof和oprofile查找性能瓶颈
- 使用FindFirstFile和FindNextFile查找某个目录下的所有文件
- 使用FindFirstFile和FindNextFile查找某个目录下的所有文件(包括子目录)
- 使用数组实现快速数据查找
- 连续查询时临时表使用释放问题
- 使用GetUniqueIndentifier为某类对象连续编码