Агрегирование по группам данных по дате в Snowflake

#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);