|
1 |
| - |
2 |
| --- SELECT levels |
3 |
| --- , PersonId |
4 |
| --- , Friends |
5 |
| --- FROM (SELECT Person1.personId AS PersonId |
6 |
| --- , STRING_AGG(Person2.personId, ';') WITHIN GROUP (GRAPH PATH) AS Friends |
7 |
| --- , LAST_VALUE(Person2.personId) WITHIN GROUP (GRAPH PATH) AS LastNode |
8 |
| --- , COUNT(Person2.personId) WITHIN GROUP (GRAPH PATH) AS levels |
9 |
| --- FROM Person AS Person1 |
10 |
| --- , Person_knows_Person FOR PATH AS fo |
11 |
| --- , Person FOR PATH AS Person2 |
12 |
| --- WHERE MATCH(SHORTEST_PATH(Person1(-(fo)->Person2)+)) |
13 |
| --- AND Person1.personId = :person1Id |
14 |
| --- ) AS Q |
15 |
| --- WHERE Q.LastNode = :person2Id |
16 |
| - |
17 |
| -DECLARE @trustedPaths as table |
18 |
| -( |
19 |
| - Id bigint, |
20 |
| - OrderDiscovered int, |
21 |
| - Path varchar(MAX) |
22 |
| -) |
23 |
| - |
24 |
| -INSERT INTO @trustedPaths |
25 |
| -EXEC dbo.knows_Breadth_First :person1Id, :person2Id; |
26 |
| - |
27 |
| -SELECT TOP(1) OrderDiscovered, Id, Path |
28 |
| - FROM @trustedPaths |
29 |
| - ORDER BY OrderDiscovered ASC; |
| 1 | +SELECT levels |
| 2 | + , PersonId |
| 3 | + , Friends |
| 4 | + FROM (SELECT Person1.personId AS PersonId |
| 5 | + , STRING_AGG(Person2.personId, ';') WITHIN GROUP (GRAPH PATH) AS Friends |
| 6 | + , LAST_VALUE(Person2.personId) WITHIN GROUP (GRAPH PATH) AS LastNode |
| 7 | + , COUNT(Person2.personId) WITHIN GROUP (GRAPH PATH) AS levels |
| 8 | + FROM Person AS Person1 |
| 9 | + , Person_knows_Person FOR PATH AS fo |
| 10 | + , Person FOR PATH AS Person2 |
| 11 | + WHERE MATCH(SHORTEST_PATH(Person1(-(fo)->Person2)+)) |
| 12 | + AND Person1.personId = :person1Id |
| 13 | + ) AS Q |
| 14 | + WHERE Q.LastNode = :person2Id |
0 commit comments