繁体   English   中英

Oracle SQL使用以前的列值来查找下一行

[英]Oracle SQL use previous column value to lookup next row

我目前拥有的:

ID  FROM_REF TO_REF
--- -------- ----
1   1        10
1   2        3
1   3        4
1   3        5
1   5        6
1   6        7
1   7        9
1   8        11
1   9        8
1   10       2

我需要的是SORT列,我可以使用它来进行排序:

ID  FROM_REF TO_REF SORT
--- -------- ----   ----
1   1        10     1
1   10       2      2
1   2        3      3
1   3        4      4
1   4        5      5
1   5        6      6
1   6        7      7
1   7        9      8
1   9        8      9
1   8        11     10

注意:TO_REF列表示下一个FROM_REF。

如何编写SQL以实现SORT列的结果?

请帮忙。

您可以使用RECURSIVE功能。

 WITH X (ID, FROM_REF, TO_REF) AS ( SELECT ID, FROM_REF, TO_REF FROM tbl WHERE FROM_REF = 1 UNION ALL SELECT tbl.ID, tbl.FROM_REF, tbl.TO_REF FROM tbl JOIN X ON tbl.ID = X.ID AND tbl.FROM_REF = X.TO_REF ) SELECT ID, FROM_REF, TO_REF FROM X 
\n ID |  FROM_REF |  TO_REF\n  - :|  -------:|  -----:\n  1 |  1 |  10\n  1 |  10 |  2\n  1 |  2 |  3\n  1 |  3 |  4\n  1 |  4 |  \n  1 |  5 |  6\n  1 |  6 |  7\n  1 |  7 |  9\n  1 |  9 |  8\n  1 |  8 |  11\n

dbfiddle 在这里

我推测,这是一个简单的分层查询。

SQL> with test (from_ref, to_ref) as
  2  (select 1, 10 from dual union
  3   select 2, 3  from dual union
  4   select 3, 4  from dual union
  5   select 4, 5  from dual union
  6   select 5, 6  from dual union
  7   select 6, 7  from dual union
  8   select 7, 9  from dual union
  9   select 8, 11 from dual union
 10   select 9, 8  from dual union
 11   select 10, 2 from dual
 12  )
 13  select from_ref, to_ref, level rn
 14  from test
 15  connect by  from_ref = prior to_ref
 16  start with from_ref = (select min(from_ref) from test);

  FROM_REF     TO_REF         RN
---------- ---------- ----------
         1         10          1
        10          2          2
         2          3          3
         3          4          4
         4          5          5
         5          6          6
         6          7          7
         7          9          8
         9          8          9
         8         11         10

10 rows selected.

SQL>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM