fiddle
Potrzebuję przy użyciu metody rekursywnej uzyskać taki wynik gdzie:
Kod
X-1, X2->X3, X2(Najwyższy rodzic)
C-1, C2->C3, C2(Najwyższy rodzic)
Y-1, X2, X2(Najwyższy rodzic)
Z-1, Z2(Najwyższy rodzic)
C-1, C2->C3, C2(Najwyższy rodzic)
Y-1, X2, X2(Najwyższy rodzic)
Z-1, Z2(Najwyższy rodzic)
Próbowałem czymś takim:
Kod
WITH RECURSIVE roots (issue_key, first_root) AS (
(SELECT aaf.issue_key, ARRAY[aaf.value_string::text]
FROM additional_fields aaf
WHERE aaf.field_name = 'customfield_12157')
UNION ALL
SELECT aaf.issue_key, ARRAY_APPEND(r.first_root, aaf.value_string::text)
FROM additional_fields aaf
INNER JOIN roots r ON TRIM(UPPER(r.issue_key)) = TRIM(UPPER(aaf.issue_key))
)
SELECT
roots.issue_key,
roots.first_root[1]
FROM roots
(SELECT aaf.issue_key, ARRAY[aaf.value_string::text]
FROM additional_fields aaf
WHERE aaf.field_name = 'customfield_12157')
UNION ALL
SELECT aaf.issue_key, ARRAY_APPEND(r.first_root, aaf.value_string::text)
FROM additional_fields aaf
INNER JOIN roots r ON TRIM(UPPER(r.issue_key)) = TRIM(UPPER(aaf.issue_key))
)
SELECT
roots.issue_key,
roots.first_root[1]
FROM roots
Najwyższy rodzic zawarty jest w polu field_name gdzie value_string = customfield_12157
ale po pierwsze lokalnie mi to działa ale zwraca błędne dane, a tutaj w fiddlu wiesza się i wypluwa błąd. Ma ktoś pomysł jak to poprawnie zrobić?