首页 > 解决方案 > 递归自加入 Redshift?

问题描述

这是针对红移表的,因此我无法使用 PSQL 中的 WITH RECURSIVE。

有一个如下所示的表:

id | current_leg | previous_leg

1   | AA         |
2   | AB         |
3   | CD         |
4   | RF         | AB
5   | AW         |
6   | FV         | AA
7   | ER         | RF

我想递归地加入它本身,以基本上计算一个 current_leg 有多少 previous_legs,或者 current_leg 的深度。所以对于这个例子,输出看起来像:

id | current_leg |count_legs
1  |    AA      |     0
2  |    AB      |     0
3  |    CD      |     0
4  |    RF      |     1
5  |    AW      |     0
6  |    FV      |     1
7  |    ER      |     2

关于如何解决这个问题的任何想法都会很棒。已阅读有关递归 CTE 的问题,但不确定如何使其适用于我的用例。

谢谢!

标签: sqlamazon-redshiftcommon-table-expression

解决方案


以下脚本为您当前的样本数据提供了预期的结果。您需要检查此脚本是否适用于更多场景的更多数据 -

SELECT A.id,A.current_leg,
CASE 
    WHEN A.previous_leg IS NULL THEN 0
    ELSE 
    (
        SELECT 
        CASE 
            WHEN B.current_leg IS NULL THEN 0 
            ELSE 1 
        END 
        +
        CASE 
            WHEN B.previous_leg  IS NULL THEN 0 
            ELSE 1 
        END

        FROM your_table B 
        WHERE B.id <= A.id 
        AND B.current_leg = A.previous_leg
    ) 
END Coun_legs
FROM your_table A

推荐阅读