Я не знаю, почему я получаю ошибку при использовании LISTAGG
агрегатной функции , поэтому я решил использовать SELECT DISTINCT
с LISTAGG
оконной функцией :
WITH input as (
SELECT '1/1/2019' as date, 'A' as id, NULL as parent_id UNION ALL
SELECT '1/1/2019', 'B', NULL UNION ALL
SELECT '1/1/2019', 'C', NULL UNION ALL
SELECT '1/1/2019', 'D#P', 'A' UNION ALL
SELECT '1/1/2019', 'Z#Z', 'A' UNION ALL
SELECT '1/1/2019', 'K#H', 'C' UNION ALL
SELECT '1/2/2019', 'Q#L', 'A' UNION ALL
SELECT '1/3/2019', 'D', NULL UNION ALL
SELECT '1/4/2019', 'H#Q', 'C'
), parents as (
SELECT *
FROM input
WHERE parent_id IS NULL
), children as (
SELECT *
FROM input
WHERE parent_id IS NOT NULL
)
SELECT DISTINCT
parents.date,
parents.id,
listagg(children.id, ',') WITHIN GROUP ( ORDER BY children.id )OVER (PARTITION BY parents.id, parents.date) as children
FROM parents JOIN children
ON parents.id = children.parent_id
AND parents.date = children.date
Выходы:
date id children
1/1/2019 A D#P,Z#Z
1/1/2019 C K#H
Решение с GROUP BY
и LISTAGG
агрегатной функцией , было бы для меня более естественным решения вашей проблемы:
WITH input as (
[...]
SELECT
parents.date,
parents.id,
listagg(children.id, ',') WITHIN GROUP ( ORDER BY children.id )
FROM parents JOIN children
ON parents.id = children.parent_id
AND parents.date = children.date
group by parents.id, parents.date
К сожалению, это возвращает ошибку, которую я на самом деле не понимаю:
[XX000] [500310] Amazon Недопустимая операция: одинили более используемых функций должны быть применены как минимум к одной созданной пользователем таблице.Примерами функций только для пользовательских таблиц являются LISTAGG, MEDIAN, PERCENTILE_CONT и т. Д .;java.lang.RuntimeException: com.amazon.support.exceptions.ErrorException: Amazon Недопустимая операция: одна или несколько используемых функций должны быть применены как минимум к одной созданной пользователем таблице.Примерами функций только для пользовательских таблиц являются LISTAGG, MEDIAN, PERCENTILE_CONT и т. Д .;