穷尽法:
WITH t (d1,d2,d3,d4,d5,d6,d7,d8,d9,path,lvl) AS (
SELECT LEVEL-1
,-1,-1,-1,-1,-1,-1,-1,-1
,TO_CHAR(LEVEL-1),1
FROM DUAL CONNECT BY LEVEL<=10
UNION ALL
SELECT d1
,DECODE(lvl,1,n2,d2)
,DECODE(lvl,2,n2,d3)
,DECODE(lvl,3,n2,d4)
,DECODE(lvl,4,n2,d5)
,DECODE(lvl,5,n2,d6)
,DECODE(lvl,6,n2,d7)
,DECODE(lvl,7,n2,d8)
,DECODE(lvl,8,n2,d9)
,path||n2
,lvl+1
FROM t,(SELECT LEVEL-1 n2 FROM DUAL CONNECT BY LEVEL<=10)
WHERE INSTR(path,n2)=0
AND (lvl NOT IN (3,6) AND SUBSTR(path,lvl,1) NOT IN (n2+1,n2-1)
OR lvl IN (3,6)
)
AND (lvl>2 AND SUBSTR(path,lvl-2,1) NOT IN (n2+1,n2-1)
OR lvl IN (1,2)
)
)
,t2 AS (SELECT path,REPLACE(d1||d2||d3,GREATEST(d1,d2,d3))*REPLACE(d4||d5||d6,GREATEST(d4,d5,d6))*REPLACE(d7||d8||d9,GREATEST(d7,d8,d9)) m FROM t WHERE lvl=9)
SELECT * FROM (SELECT * FROM t2 ORDER BY m DESC) WHERE ROWNUM=1;
PATH M
----------------- ---------
425809637 211680
Elapsed: 00:00:15.60 |