【发布时间】:2013-06-21 06:35:19
【问题描述】:
此问题基于以下问题,但附加要求:PostgreSQL: How to find the last descendant in a linear "ancestor-descendant" relationship
基本上,我需要的是一个 Postgre-SQL 语句,它可以在符合附加条件的线性“祖先-后代”关系中找到最后一个后代。
例子:
这里是表“RELATIONSHIP_TABLE”的内容:
id | id_ancestor | id_entry | bool_flag
---------------------------------------
1 | null | a | false
2 | 1 | a | false
3 | 2 | a | true
4 | 3 | a | false
5 | null | b | true
6 | null | c | false
7 | 6 | c | false
特定层次结构中的每条记录都有相同的“id_entry” 此示例中有 3 种不同的“祖先-后代”关系:
1. 1 <- 2 <- 3 <- 4
2. 5
3. 6 <- 7
问题PostgreSQL: How to find the last descendant in a linear "ancestor-descendant" relationship 显示了如何找到每个关系的最后一条记录。在上面的例子中:
1. 4
2. 5
3. 7
所以,这次我需要的是“id_entry”的最后一个后代,其“bool_flag”设置为true。在上面的例子中:
1. 3
2. 5
3. <empty result>
有人知道解决办法吗?
提前致谢:)
QStormDS
【问题讨论】:
-
在你的例子中,anchestor 关系是排序的(就像祖先总是有比 descandants 更小的 id)。在你的情况下总是这样吗?
-
我很确定第一个问题的答案是错误的;我看不出它怎么可能处理祖先的链条。
-
不应该有 {id=5 , id_entry=b,bool_flag=True} 的记录也在预期的输出中吗?
-
请不要使用标题来标记您的问题。请改用标记系统。
-
所以 ...
id_entry对于同一链中的所有条目是否应该相同?这是由外键强制执行的,所以你可以依赖它吗?如果是这样,我的查询可以简化。
标签: postgresql hierarchical-data ancestor