2017-05-03 25 views
0

我有一個場景,我需要從Oracle中的continue_from和continued_to日期字段綁定的多行中找到開始日期和結束日期。 的結果應該如何通過從oracle列中的id列繼續連接多個行

ID STARTDATE ENDDATE  
-- ---------- ----------  
3 01/01/1000 12/31/9999 

ID STARTDATE ENDDATE  CONT_FROM_ID CONT_TO_ID 
-- ---------- ---------- ------------ ----------- 
1 01/01/1000 10/10/1999   NULL   2  
2 10/10/1999 11/11/2000    1   3 
3 11/11/2000 12/31/9999    2   NULL 
+0

你檢查,對遞歸查詢的文檔?使用CONNECT BY是解決這個問題的一種方法。 – Andrew

回答

0

Oracle的分層查詢語法可以很容易地在樹從父到子。分析lead()lag()函數跟蹤下一個和以前的ID。

select c23.id 
     , c23.startdate 
     , c23.enddate 
     , lag(c23.id) over (partition by p23.id order by c23.id) as cont_from_id 
     , lead(c23.id) over (partition by p23.id order by c23.id) as cont_to_id 
from p23 
    join c23 on p23.startdate <= c23.startdate 
     and p23.enddate >= c23.enddate 
order by c23.id 
/

這裏使用的測試示例數據:

SQL> select c23.id 
    2   , c23.startdate 
    3   , c23.enddate 
    4   , lag(c23.id) over (partition by p23.id order by c23.id) as cont_from_id 
    5   , lead(c23.id) over (partition by p23.id order by c23.id) as cont_to_id 
    6 from p23 
    7  join c23 on p23.startdate <= c23.startdate 
    8  and p23.enddate >= c23.enddate 
    9 order by c23.id 
10/  

     ID STARTDATE ENDDATE CONT_FROM_ID CONT_TO_ID 
---------- --------- --------- ------------ ---------- 
     1 01-JAN-00 10-OCT-99      2 
     2 10-OCT-99 11-NOV-00   1   3 
     3 11-NOV-00 31-DEC-99   2 

SQL>