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, если они недоступны в вашей реализации.