SQL найти группы на основе временных диапазонов

У меня есть таблица, которая имеет следующие столбцы:

  • Purchase_ID (varchar)
  • User_ID (varchar)
  • Purchase_time (bigint) - в UNIX

с некоторыми другими менее важными.

Существует более 60 000 уникальных идентификаторов покупки. все отдельные идентификаторы User_ID появляются как минимум 4 раза (обычно намного больше), то есть это пользователи, которые совершили как минимум 4 покупки.

Что я хочу сделать, так это найти группы User_ID, которые совершали покупки в течение аналогичных периодов времени. Например, возьмите пользователя A, найдите всех других пользователей, которые совершили покупки в течение одного часа до и после каждой покупки пользователя A, затем возьмите этих двух пользователей, повторяйте процесс, пока я не достигну максимально возможного числа пользователей, которые сделали покупки вместе. Количество покупок, связывающих всех участников группы, должно быть не менее 3.

Я понимаю, что это довольно сложно и, возможно, приведет к множеству разных таблиц, но я понятия не имею, как начать делать это, поэтому вся помощь будет оценена.

Спасибо всем помощникам и приятного дня!

редактировать:

  • Что касается тега базы данных, я использую AWS Athena, я не уверен, какие функции он поддерживает, так как я совершенно новичок в этом.

  • Пример данных:

User ID   Time
User_A    1521441850
User_B    1521441930
User_C    1521500000
User_D    1521530023
User_E    1521441900
User_F    1521000000
User_A    1521445850
User_B    1521445980
User_C    1521510000
User_D    1521520055
User_E    1521445100
User_F    1521000010
User_A    1521449850
User_B    1521445030
User_C    1521520000
User_D    1521500033
User_E    1521441910
User_F    1521000020
User_A    1521453850
User_B    1521441920
User_C    1521530000
User_D    1521540000
User_E    1521400000
User_F    1521000030
  • Желаемый результат: я гибок в этом, но по сути это может быть что-то вроде этого:

Таблица 1

Group1    Group2
User_A    User_C
User_B    User_D
User_E

Таблица 2

Group Name    Amount of Users Amount of Purchases Linked
Group1        3               11
Group2        2               8

1 ответ

Какая база данных?

Вам нужно знать, как работает время Unix, чтобы вы могли работать с ним, чтобы разрешить интересующий вас двухчасовой диапазон.

Посмотрите функции OLAP для вашей базы данных. Если возможно, функции LAG и LEAD могут вам помочь. Их можно эмулировать с более распространенными функциями OLAP, если они недоступны в вашей реализации.

Другие вопросы по тегам