Hem*_*ant 0 sql hierarchy google-bigquery
我通过这种方式从 ControlM(调度程序)获得了数据
PREDECESSOR_JOB_ID,SUCCESSOR_JOB_ID
XYZ,ABC
ABC,LMN
ABC,PQR
XYZ,EFG
EFG,STU
STU,TUV
STU,VWX
.
.
.
Run Code Online (Sandbox Code Playgroud)
我看到了许多解决方案,它们从第一个节点开始并下降到最后一个节点。但这很可能会随着这些数据而扇出。我正在寻找一个扇入解决方案,我可以从任何端节点开始并到达第一个节点
在这种情况下,我正在寻找的答案是
ABC-->XYZ
LMN-->ABC-->XYZ
PQR-->ABC-->XYZ
EFG-->XYZ
STU-->EFG-->XYZ
TUV-->STU-->EFG-->XYZ
VWX-->STU-->EFG-->XYZ
Run Code Online (Sandbox Code Playgroud)
考虑以下方法
with recursive iterations as (
select successor_job_id, predecessor_job_id, 1 pos from your_table
union all
select b.successor_job_id, a.predecessor_job_id, pos + 1
from your_table a join iterations b
on b.predecessor_job_id = a.successor_job_id
)
select successor_job_id || '-->' || string_agg(predecessor_job_id, '-->' order by pos) as jobs_path
from iterations
where not successor_job_id is null
group by successor_job_id
Run Code Online (Sandbox Code Playgroud)
如果应用于您问题中的样本数据 - 输出是