PHP code: SQL> select * from t8; A B C Q ---------- ---------- ---------- - 100 199 2 A 0 999 1 A 300 499 2 A 555 666 2 A 已用时间: 00: 00: 00.00 Execution Plan ---------------------------------------------------------- 0 SELECT STATEMENT Optimizer=CHOOSE 1 0 TABLE ACCESS (FULL) OF 'T8' SQL> SELECT NVL2(LAG(A)OVER(PARTITION BY Q ORDER BY A),B+1,MIN(A)OVER(PARTITION BY Q)) S, 2 NVL(LEAD(A)OVER(PARTITION BY Q ORDER BY A)-1,MAX(B)OVER(PARTITION BY Q)) E 3 from t8 START WITH C=1 CONNECT BY C-1 = PRIOR C AND Q= PRIOR Q 4 / S E ---------- ---------- 0 99 200 299 500 554 667 999 已用时间: 00: 00: 00.00 Execution Plan ---------------------------------------------------------- 0 SELECT STATEMENT Optimizer=CHOOSE 1 0 WINDOW (SORT) 2 1 CONNECT BY (WITH FILTERING) 3 2 NESTED LOOPS 4 3 TABLE ACCESS (FULL) OF 'T8' 5 3 TABLE ACCESS (BY USER ROWID) OF 'T8' 6 2 NESTED LOOPS 7 6 BUFFER (SORT) 8 7 CONNECT BY PUMP 9 6 TABLE ACCESS (FULL) OF 'T8' SQL> 。。。。。。。。。。。
SQL> select * from t8; A B C Q ---------- ---------- ---------- - 100 199 2 A 0 999 1 A 300 499 2 A 555 666 2 A 已用时间: 00: 00: 00.00 Execution Plan ---------------------------------------------------------- 0 SELECT STATEMENT Optimizer=CHOOSE 1 0 TABLE ACCESS (FULL) OF 'T8' SQL> SELECT NVL2(LAG(A)OVER(PARTITION BY Q ORDER BY A),B+1,MIN(A)OVER(PARTITION BY Q)) S, 2 NVL(LEAD(A)OVER(PARTITION BY Q ORDER BY A)-1,MAX(B)OVER(PARTITION BY Q)) E 3 from t8 START WITH C=1 CONNECT BY C-1 = PRIOR C AND Q= PRIOR Q 4 / S E ---------- ---------- 0 99 200 299 500 554 667 999 已用时间: 00: 00: 00.00 Execution Plan ---------------------------------------------------------- 0 SELECT STATEMENT Optimizer=CHOOSE 1 0 WINDOW (SORT) 2 1 CONNECT BY (WITH FILTERING) 3 2 NESTED LOOPS 4 3 TABLE ACCESS (FULL) OF 'T8' 5 3 TABLE ACCESS (BY USER ROWID) OF 'T8' 6 2 NESTED LOOPS 7 6 BUFFER (SORT) 8 7 CONNECT BY PUMP 9 6 TABLE ACCESS (FULL) OF 'T8' SQL> 。。。。。。。。。。。
PHP code: SQL> select * from t8; A B C Q ---------- ---------- ---------- - 100 199 2 A 0 999 1 A 300 499 2 A 555 666 2 A 200 299 2 A 877 877 2 A 1499 4888 1 A 1600 2398 2 A 3000 3999 2 A 5000 6999 1 A 4887 4887 2 A 已选择11行。 已用时间: 00: 00: 00.02 Execution Plan ---------------------------------------------------------- 0 SELECT STATEMENT Optimizer=CHOOSE 1 0 TABLE ACCESS (FULL) OF 'T8' SQL> select S,E from 2 ( 3 SELECT NVL2(LAG(A)OVER(PARTITION BY Q, xx ORDER BY A),B+1,MIN(A)OVER(PARTIT ION BY Q, xx)) S, 4 NVL(LEAD(A)OVER(PARTITION BY Q, xx ORDER BY A)-1,MAX(B)OVER(PARTITION BY Q, xx)) E from 5 ( 6 select t8.*, nvl(prior a,a) xx from t8 START WITH C=1 CONNECT BY C-1 = PRI OR C AND Q= PRIOR Q 7 and A>= prior a and b<= prior b 8 ) 9 ) 10 where s<=e 11 / S E ---------- ---------- 0 99 500 554 667 876 878 999 1499 1599 2399 2999 4000 4886 4888 4888 5000 6999 已选择9行。 已用时间: 00: 00: 00.01 Execution Plan ---------------------------------------------------------- 0 SELECT STATEMENT Optimizer=CHOOSE 1 0 VIEW 2 1 WINDOW (SORT) 3 2 VIEW 4 3 CONNECT BY (WITH FILTERING) 5 4 NESTED LOOPS 6 5 TABLE ACCESS (FULL) OF 'T8' 7 5 TABLE ACCESS (BY USER ROWID) OF 'T8' 8 4 NESTED LOOPS 9 8 BUFFER (SORT) 10 9 CONNECT BY PUMP 11 8 TABLE ACCESS (FULL) OF 'T8' SQL> ...................................
SQL> select * from t8; A B C Q ---------- ---------- ---------- - 100 199 2 A 0 999 1 A 300 499 2 A 555 666 2 A 200 299 2 A 877 877 2 A 1499 4888 1 A 1600 2398 2 A 3000 3999 2 A 5000 6999 1 A 4887 4887 2 A 已选择11行。 已用时间: 00: 00: 00.02 Execution Plan ---------------------------------------------------------- 0 SELECT STATEMENT Optimizer=CHOOSE 1 0 TABLE ACCESS (FULL) OF 'T8' SQL> select S,E from 2 ( 3 SELECT NVL2(LAG(A)OVER(PARTITION BY Q, xx ORDER BY A),B+1,MIN(A)OVER(PARTIT ION BY Q, xx)) S, 4 NVL(LEAD(A)OVER(PARTITION BY Q, xx ORDER BY A)-1,MAX(B)OVER(PARTITION BY Q, xx)) E from 5 ( 6 select t8.*, nvl(prior a,a) xx from t8 START WITH C=1 CONNECT BY C-1 = PRI OR C AND Q= PRIOR Q 7 and A>= prior a and b<= prior b 8 ) 9 ) 10 where s<=e 11 / S E ---------- ---------- 0 99 500 554 667 876 878 999 1499 1599 2399 2999 4000 4886 4888 4888 5000 6999 已选择9行。 已用时间: 00: 00: 00.01 Execution Plan ---------------------------------------------------------- 0 SELECT STATEMENT Optimizer=CHOOSE 1 0 VIEW 2 1 WINDOW (SORT) 3 2 VIEW 4 3 CONNECT BY (WITH FILTERING) 5 4 NESTED LOOPS 6 5 TABLE ACCESS (FULL) OF 'T8' 7 5 TABLE ACCESS (BY USER ROWID) OF 'T8' 8 4 NESTED LOOPS 9 8 BUFFER (SORT) 10 9 CONNECT BY PUMP 11 8 TABLE ACCESS (FULL) OF 'T8' SQL> ...................................