0
我有一个包含数千条记录的processDependency表。样本记录给出如下:以下情况下的SQL查询
Proc DepProc
P1 P2
P2 P3
P3 P4
P4 P5
P6 P7
所以,当我运行SQL查询我应该能够如下推导:
- P1-P2-P3-P4-P5
P6,P7
任何人都可以帮助我与一般的SQL。
我有一个包含数千条记录的processDependency表。样本记录给出如下:以下情况下的SQL查询
Proc DepProc
P1 P2
P2 P3
P3 P4
P4 P5
P6 P7
所以,当我运行SQL查询我应该能够如下推导:
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
非常感谢@Hogan,它调整了CTE查询后的工作。您的回答非常有帮助。 –
标记正在使用的dbms –
我不相信你可以有无限深度的层次处理的通用查询。您将需要使用RDBMS特定的功能。 –
所以,如果我们有一个明确的深度说例如12 ..那么有可能吗? –