Может ли кто-нибудь помочь с приведенными ниже примерами, большое спасибо
id color date
1 red 01/01
1 red 01/02
1 yellow 01/03
1 red 02/01
2 red 01/01
2 blue 01/02
2 blue 02/02
3 red 01/01
4 red 02/01
Идеальный результат должен быть:
id pattern
1 (red, yellow) to (red)
2 (red, blue) to (blue)
3 (red)
4 (red)
Результат отображает две вещи:
- Уникальный паттерн в течение одного месяца
- должен агрегировать паттерн вместе во временных диапазонах
Например, мы можем видеть, что id_1 имеет паттерн изменения в январе с (красный, желтый), но в феврале у него только один узор (красный). Поэтому окончательный результат должен быть от (красный, желтый) до (красный)
Запрос, который у меня сейчас есть,
select drv.id, extract(month from date) as month,
trim(trailing',' from (XMLAGG(TRIM(color)',' order by date)(varchar(10000)))) as pattern from
(select id, color,
lag(color)over(partition by id, extract(month from date) order by date) as prev_color
from table
qualify prev_color <> color
) as drv
group by id, extract(month from date)
Запрос неполный, и он возвращает результат, как показано ниже, но Возможно ли, что мы сможем вернуть его по месяцам?
Есть ли способ, которым мы можем смешивать использование XMLAGG и разбиение по?
Кто-нибудь может дать какие-нибудь идеи? Большое спасибо!