SQL 查询以下场景
SQL query for below scenario
我有一个 processDependency table,它有数千条记录。示例记录如下:
Proc DepProc
P1 P2
P2 P3
P3 P4
P4 P5
P6 P7
所以当我 运行 SQL 查询时,我应该能够得出以下结果:
P1-P2-P3-P4-P5
P6-P7
任何人都可以帮我解决通用问题 SQL。
这不太正确,因为它从 Proc
获取所有路径
但是你没有说清楚先用哪个
无论如何它应该给你一个想法。
SELECT recurse AS
(
SELECT Proc AS Start,
Proc||COALESCE('-'||DepProc,'') AS PATH,
DepProc as Next, 1 as Level
FROM table
UNION ALL
SELECT Start,
PATH||'-'||t.DepProc,
t.DepProc as Next,
Level+1 as Level
FROM recurse r
JOIN table t ON r.Next = t.Proc
), recurseWithMax AS
(
SELECT PATH, Start, MAX(Level) OVER (Partition by Start) as Max, Level
)
SELECT Start, PATH
FROM recurseWithMax
WHERE Level = Max
我有一个 processDependency table,它有数千条记录。示例记录如下:
Proc DepProc
P1 P2
P2 P3
P3 P4
P4 P5
P6 P7
所以当我 运行 SQL 查询时,我应该能够得出以下结果:
P1-P2-P3-P4-P5
P6-P7
任何人都可以帮我解决通用问题 SQL。
这不太正确,因为它从 Proc
获取所有路径但是你没有说清楚先用哪个
无论如何它应该给你一个想法。
SELECT recurse AS
(
SELECT Proc AS Start,
Proc||COALESCE('-'||DepProc,'') AS PATH,
DepProc as Next, 1 as Level
FROM table
UNION ALL
SELECT Start,
PATH||'-'||t.DepProc,
t.DepProc as Next,
Level+1 as Level
FROM recurse r
JOIN table t ON r.Next = t.Proc
), recurseWithMax AS
(
SELECT PATH, Start, MAX(Level) OVER (Partition by Start) as Max, Level
)
SELECT Start, PATH
FROM recurseWithMax
WHERE Level = Max