|
20题:结果是MODEL最快。
WITH t(n,q,r,lvl) AS (
SELECT LEVEL
,TRUNC(TO_NUMBER(LEVEL||'123456789')/7)
,MOD(TO_NUMBER(LEVEL||'123456789'),7)
,1
FROM DUAL
WHERE LEVEL>11 AND SUBSTR(LEVEL,1,1)>SUBSTR(LEVEL,2,1)
CONNECT BY LEVEL<=99
UNION ALL
SELECT n
,TRUNC(TO_NUMBER(r||'123456789')/7)
,MOD(TO_NUMBER(r||'123456789'),7)
,lvl+1
FROM t
WHERE lvl<99
)
,t2(n,q,r,lvl) AS (
SELECT n
,TRUNC(TO_NUMBER(n||'123456789')/7)
,MOD(TO_NUMBER(n||'123456789'),7)
,1
FROM (SELECT TO_NUMBER(SUBSTR(n,2,1)||SUBSTR(n,1,1)) n FROM t WHERE lvl=99 AND r=0)
UNION ALL
SELECT n
,TRUNC(TO_NUMBER(r||'123456789')/7)
,MOD(TO_NUMBER(r||'123456789'),7)
,lvl+1
FROM t2
WHERE lvl<99
)
SELECT * FROM t2 WHERE lvl=99 AND r=0
;
N Q R LVL
---------- ---------- ---------- ----------
29 160493827 0 99
Elapsed: 00:00:00.22
WITH t(n,q,r,lvl) AS (
SELECT LEVEL
,TRUNC(TO_NUMBER(LEVEL||'123456789')/7)
,MOD(TO_NUMBER(LEVEL||'123456789'),7)
,1
FROM DUAL
WHERE LEVEL>11 AND MOD(LEVEL,11)<>0
CONNECT BY LEVEL<=99
UNION ALL
SELECT n
,TRUNC(TO_NUMBER(r||'123456789')/7)
,MOD(TO_NUMBER(r||'123456789'),7)
,lvl+1
FROM t
WHERE lvl<99
)
,d AS (SELECT * FROM t WHERE lvl=99 AND r=0)
SELECT d1.n
FROM d d1, d d2
WHERE d1.n<d2.n AND d1.n=SUBSTR(d2.n,2,1)||SUBSTR(d2.n,1,1)
N
----------
29
Elapsed: 00:00:00.54
WITH d AS (
SELECT *
FROM(SELECT *
FROM (SELECT LEVEL n
,LEVEL r
FROM DUAL
WHERE LEVEL>11 AND MOD(LEVEL,11)<>0
CONNECT BY LEVEL<=99
)
MODEL
PARTITION BY (n)
DIMENSION BY (0 lvl)
MEASURES (0 q,r)
RULES
ITERATE (99)
(
q[ITERATION_NUMBER+1]=TRUNC(TO_NUMBER(r[ITERATION_NUMBER]||'123456789')/7),
r[ITERATION_NUMBER+1]=MOD(TO_NUMBER(r[ITERATION_NUMBER]||'123456789'),7)
)
)
WHERE lvl=99 AND r=0
)
SELECT d1.n
FROM d d1, d d2
WHERE d1.n<d2.n AND d1.n=SUBSTR(d2.n,2,1)||SUBSTR(d2.n,1,1)
;
N
----------
29
Elapsed: 00:00:00.07
如果最后不用输出商数,字段q的计算可以去掉。 |
|