【发布时间】:2020-09-01 15:33:36
【问题描述】:
我有一个查询要查找家谱中最年轻的一代。 这是我的数据库
ID NAME PARENT_ID
1 A 0
2 B 1
3 C 1
4 D 2
5 E 3
6 F 3
7 G 6
如果结果超过一行,我需要如下所示的输出
NAME GENERATIONS
E 4
F 4
或者如果结果返回单行
NAME GENERATIONS
G 5
这是我的查询:
WITH RECURSIVE children AS
(
SELECT id, name, parent_id
FROM family
UNION ALL
SELECT f.id, f.name, f.parent_id
FROM family f
INNER JOIN children c ON c.id = f.parent_id
)
SELECT
(
SELECT name
FROM family
WHERE id IS NOT NULL
AND parent_id =
(
SELECT MAX(parent_id) as maxpi
FROM family
)
) AS name,
COUNT(DISTINCT main.parent_id) AS generations
FROM family main
ORDER BY name
如何解决这个问题?还有一个问题是有没有办法使用窗口功能获得结果?
【问题讨论】:
标签: sql postgresql recursive-query