我目前正在使用我的数据库构建FamilyTree。 我找到了一个基于familytree构建输出的查询,但现在我想要一些额外的功能。但老实说,我不知道从哪里开始。
可在此处查看FamilyTree输出:http://data.stackexchange.com/stackoverflow/query/84004/family-tree-sql-query
所以我的问题是,如果我想回溯一个人群中“最老的”人物,我该怎么办?
Fx:哪个父亲是ID 8的顶级人物?
通过阅读输出,我可以说答案是1:8 - > 5 - > 4 - > 1
答案 0 :(得分:2)
我建议用CTE做。像这样的东西会起作用:
WITH SearchHierarchy AS (
SELECT ID, Name, FatherID, 0 AS Level
FROM FamilyTree
WHERE ID = 8
UNION ALL
SELECT a.ID, a.Name, a.FatherID, Level + 1
FROM FamilyTree a
INNER JOIN SearchHierarchy b ON a.ID = b.FatherID
)
SELECT TOP 1 ID, Name
FROM SearchHierarchy
ORDER BY LEVEL DESC
对于工作演示:On SQLFiddle