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;