Sql 如何在oracle中通过continue from和to id列连接多行

Sql 如何在oracle中通过continue from和to id列连接多行,sql,oracle,hierarchical-data,Sql,Oracle,Hierarchical Data,我有一个场景,我需要从Oracle中由continued_from和continued_to date字段绑定的多行中查找开始日期和结束日期。 结果应该是这样的 ID STARTDATE ENDDATE -- ---------- ---------- 3 01/01/1000 12/31/9999 ID STARTDATE ENDDATE CONT_FROM_ID CONT_TO_ID -- ---------- ----------

我有一个场景,我需要从Oracle中由continued_from和continued_to date字段绑定的多行中查找开始日期和结束日期。 结果应该是这样的

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

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
/
选择c23.id
,c23.startdate
,c23.enddate
,滞后(c23.id)超过(按p23.id划分,按c23.id排序)作为cont_from_id
,将(c23.id)引导到(按p23.id划分,按c23.id排序)上,作为cont_to_id
从第23页开始
在p23.startdate=c23.enddate上加入c23
按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> 
SQL>选择c23.id
2,c23.startdate
3,c23.enddate
4,滞后(c23.id)超过(按p23.id划分,按c23.id排序)作为cont_from_id
5,将(c23.id)作为cont_-to_-id引入(按p23.id划分,按c23.id排序)
第23页第6页
7在p23.startdate=c23.enddate上加入c23
9通过c23.id订购
10  /         
ID STARTDATE ENDDATE CONT_从\u ID CONT_到\u ID
---------- --------- --------- ------------ ----------
1 01-JAN-00 1999年10月10日2
2 1999年10月10日11月11日1 3
2000年11月3日1999年12月31日2
SQL>

您是否检查了递归查询的文档?使用“连接方式”是解决此问题的一种方法。