gpt4 book ai didi

sql - 递归地从同一个表父子表中获取最后一条记录

转载 作者:行者123 更新时间:2023-12-02 20:03:15 26 4
gpt4 key购买 nike

我想从同一个表中获取最后的引用 ID。我有下表。

 ID   UserId   DelegatedToUserId
1 100 101
2 101 102
3 102 103
4 103 NULL
5 104 109

我实在是想不起来。我知道我想要什么,只是无法将其显示在屏幕上。因此,当我询问 100 查询时应返回 103,当我再次询问 101 或 102 时,应返回 103。当用户输入 104 时,应返回 109

当我请求 103 时,它应该返回 103,因为没有委托(delegate)。

这可以在单个 SQL 查询中完成吗?

最佳答案

can this be done in single sql query ?

如果您不知道层次结构可以达到哪一级,则需要使用递归CTE。如果只是 1 或 2 级,您可以在单个查询中无需递归 CTE 来完成。

您可以使用如下所示的递归CTE来获得所需的输出。

;WITH mytest 
AS (SELECT P.userid,
P.delegatedtouserid,
1 AS LVL
FROM @table P
WHERE userid = 100
UNION ALL
SELECT P1.userid,
P1.delegatedtouserid,
M.lvl + 1 AS LVL
FROM @table P1
INNER JOIN mytest M
ON M.delegatedtouserid = P1.userid)

SELECT TOP 1 WITH ties *
FROM mytest
ORDER BY Row_number() OVER (ORDER BY lvl DESC);

注意:将 @table 替换为您的实际表名称。

Online Demo

关于sql - 递归地从同一个表父子表中获取最后一条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55353807/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com