递归自我加入Redshift?

时间:2019-05-22 17:51:30

标签: sql amazon-redshift common-table-expression

这是用于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的问题,但不确定如何使它适用于我的用例。

谢谢!

1 个答案:

答案 0 :(得分:0)

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

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