#aggregate-functions #etl #snowflake-cloud-data-platform #window-functions
Вопрос:
В моей таблице есть следующие данные:
Мне нужно, чтобы в Snowflake вывод был следующим:
В основном это порядок по дате транзакции и получение первой транзакции и последней транзакции для страны и города, а также количество транзакций по мере их выполнения в последовательности. Я пробовал использовать оконные функции, но не получаю желаемого результата. Самое сложное, если вы видите, заключается в том, что группировка должна выполняться, но последовательно. Вы можете видеть, как ТЕХАС и КАЛИФОРНИЯ повторяются в зависимости от последовательности транзакций для страны и города.
Лучше всего это может быть с помощью запроса. Во-вторых, в каком-то другом быстром способе вычислений. Это должно быть сделано с пакетами данных. Я действительно не хочу переходить к подходу, при котором данные извлекаются в порядке, а затем последовательно просматриваются строка за строкой, если только это не единственный вариант. Открыт для консультаций и по этому вопросу. Спасибо!
Ответ №1:
Подсказка: ГРУППИРОВКА ПО, МИН, МАКС, КОЛИЧЕСТВО
Комментарии:
1. Это не дает нескольких строк для ТЕХАСА и КАЛИФОРНИИ
Ответ №2:
Мне удалось найти логику, и следующий запрос работает:
select countryid, regionid, min(requesttime), max(requesttime), count(*) from (select deviceid,countryid,regionid,cityid, requesttime,
row_number() over (partition by countryid order by requesttime) as seqnum_1,
row_number() over (partition by countryid, regionid order by requesttime) as seqnum_2
from table t order by requesttime
) t group by countryid, regionid, (seqnum_1 - seqnum_2) order by min(requesttime);