Рекурсивное само присоединение к Redshift? - PullRequest
0 голосов
/ 22 мая 2019

Это для таблицы красного смещения, поэтому мне не доступен WITH WITH RECURSIVE от PSQL.

Есть таблица, которая выглядит следующим образом:

id | current_leg | previous_leg

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

И я хочу рекурсивно присоединить его к себе, чтобы в основном получить счетчик того, сколько предыдущих_лег имеет текущий_лег, или глубину текущего_лега. Таким образом, для этого примера вывод будет выглядеть так:

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 голосов
/ 22 мая 2019

Этот следующий скрипт дает ожидаемые результаты для ваших текущих данных образца. Вы должны проверить, что этот сценарий применим для большего количества данных с большим количеством сценариев или нет-

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
...