我们可以使用解析函数来检索层次结构中的 parents 和 child 吗?

Can we use analytic functions to retrieve parents and child in hierarchy?

我有以下数据(真实数据的样本,要大得多):

id p_id
1  null
2  1
3  1
4  2
5  4
6  5
7  5
8  3
9  7

是否可以使用SQL服务器的解析函数得到如下结果(得到最深的层级):

id p_id
1  null
2  1
4  2
5  4
7  5
9  7

我可以使用递归 CTE 来获取每个 ID 的级别,但是我正在尝试改用分析函数。我怀疑我需要使用 Lag 或 Lead 函数,但我是分析函数的新手,所以如果可以做到这一点,请帮助分享解决方案。感谢您的帮助!谢谢

让我post将其作为答案而不是评论。

不,您不能为此目的使用分析函数。分析函数可让您汇总有关已知记录组的数据。摘要可能非常奇特——例如部分求和或计算百分位数或获取组中的先前记录。但是,"group" 是在 windowing 子句中静态定义的。

也就是说,可以表示分层数据,所以这是可能的。这个想法是包括每个元素的完整路径:

id parent_path
1  /1
2  /1/2
3  /1/3
4  /1/2/4
5  /1/2/4/5
6  /1/2/4/5/6
7  /1/2/4/5/7
8  /1/3/8
9  /1/2/4/5/7/9

使用此表示,您可以使用window函数来获取“1”的所有子项。也就是说,根本不需要 window 函数。一个简单的 like 表达式有效:parent_path like '/1/%'.

这个数据结构的挑战是设置触发器来维护它(绝对可能,只是一些工作)。