通过一系列先前的 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
需要你的帮助。我 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