我有一个带有“行”的SQL表,该行表示链表的元素。例如,我可能有以下记录:
(id, previous_id)
------------------
(1, NULL)
(2, NULL)
(3, 2)
(4, 3)
(5, NULL)
(6, 4)
(7, 5)
该表中有3个列表:
(1,)
(2,3,4,6)
(5,7)
我想找到每个列表的最后一个元素以及列表中的元素数量。我正在寻找的查询将输出:
last, len
1, 1
6, 4
7, 2
在SQL中这可能吗?
WITH RECURSIVE cte AS (
SELECT id AS first, id AS last, 1 as len
FROM lines
WHERE previous_id IS NULL
UNION ALL
SELECT c.first, l.id, len + 1
FROM cte c
JOIN lines l ON l.previous_id = c.last
)
SELECT DISTINCT ON (first)
last, len -- , first -- also?
FROM cte
ORDER BY first, len DESC;
db <>在这里拨弄
精确地产生您的结果。
如果您还希望第一个元素如标题中所述,则可以轻松获得。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句