通过一系列先前的 rows/RECURSIVE/CONNECTED BY 向后计算列值

Calculate a column value backwards over a series of previous rows/RECURSIVE/CONNECTED BY

需要你的帮助。我 guess/hope 有一个功能。我找到了“CONNECT DBY”和“WITH RECURSIVE AS ...”,但它似乎并没有解决我的问题。

给出的表格:

Table一个

+------+------------+----------+
| id   |   prev_id  |  date    |
+------------------------------+
| 1    |            | 20200101 |
| 23   |     1      | 20200104 |
| 34   |     23     | 20200112 |
| 41   |     34     | 20200130 |
+------------------------------+

Table B

+------+-----------+
| ref_id  |  key   |
+------------------+
|    41   |  abc   |
+------------------+

(始终指向 table“A”中的最新条目。更新,无历史记录)

加入声明:

SELECT id, prev_id, 键, 日期 从一个 左外连接 B 在 B.ref_id = A.id

GIVEN psql 结果集:

+------+------------+----------+-----------+
| id   |   prev_id  |    key   |   date    |
+------------------------------+-----------+
| 1    |            |          | 20200101  |
| 23   |     1      |          | 20200104  |
| 34   |     23     |          | 20200112  |
| 41   |     34     |   abc    | 20200130  |
+------------------------------+-----------+

期望的输出:

+------+------------+----------+-----------+
| id   |   prev_id  |    key   |   date    |
+------------------------------+-----------+
| 1    |            |   abc    | 20200101  |
| 23   |     1      |   abc    | 20200104  |
| 34   |     23     |   abc    | 20200112  |
| 41   |     34     |   abc    | 20200130  |
+------------------------------+-----------+

结果集的行由 'id' 和 'prev_id' 列连接。 我想在合理的时间内计算“关键”列。 请记住,这是一个非常简化的示例。通常有更多的行和不同的键和 id's

我了解到您想在 tableb 中显示每一行的层次结构。这是使用递归查询的一种方法:

with recursive cte as (
    select a.id, a.prev_id, a.date, b.key
    from tablea a
    inner join tableb b on b.ref_id = a.id
    union all
    select a.id, a.prev_id, a.date, c.key
    from cte c
    inner join tablea a on a.id = c.prev_id
)
select * from cte