分级查询应该可以工作。由于你想从每个PID的最高SEQ开始,所以需要一些额外的技巧。
SELECT pid, fulldesc FROM (
SELECT pid, SYS_CONNECT_BY_PATH(desc, '||') fulldesc, seq, minseq FROM (
SELECT pid, seq, desc,
MAX(seq) OVER (PARTITION BY pid) maxseq,
MIN(seq) OVER (PARTITION BY pid) minseq
FROM tableB
)
START WITH seq = maxseq
CONNECT BY pid = PRIOR pid AND seq = PRIOR seq - 1
)
WHERE seq = minseq
ORDER BY pid
;
编辑:添加一个过滤器一种方式的要求,在注释:
SELECT pid, fulldesc FROM (
SELECT pid, SYS_CONNECT_BY_PATH(desc, '||') fulldesc, seq, minseq FROM (
SELECT pid, seq, desc,
MAX(seq) OVER (PARTITION BY pid) maxseq,
MIN(seq) OVER (PARTITION BY pid) minseq
FROM tableB
WHERE pid IN (SELECT pid FROM tableB WHERE desc='day.')
)
START WITH seq = maxseq
CONNECT BY pid = PRIOR pid AND seq = PRIOR seq - 1
)
WHERE seq = minseq
ORDER BY pid
http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:2196162600402#18313422264397 – 2011-03-08 04:14:20
该示例使用函数! – jagamot 2011-03-08 04:20:40