Войти Регистрация
Data base

234. Первая покупка и что было за 72 часа после неё

Средняя

В transactions — покупки во ВКонтакте: стикеры, подарки, голоса, подписки. Для каждого пользователя с покупками найдите first_item — название первой по времени покупки. Если две прошли в одну секунду, первая та, у которой меньше tx_id.

Посчитайте tx_72h — сколько транзакций пользователь сделал за 72 часа с момента первой, включая её саму. Транзакция ровно через 72:00:00 входит в окно, через 72:00:01 — уже нет.

Верните user_id, first_item, tx_72h, порядок — по user_id. Пользователей без покупок не выводите.

В работе: Оценка первой сессии покупок: что берут сначала и возвращаются ли за вторым платежом в первые трое суток.

Таблицы

transactions — одна строка — одна покупка

КолонкаТипЧто значит
tx_idintключ
user_idintпользователь
created_attimestampвремя
item_nametextчто купили

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

transactions · 6 строк

tx_iduser_idcreated_atitem_name
112025-05-01T10:00:00Стикеры «Котики»
212025-05-02T09:00:00Подарок «Торт»
312025-05-04T10:00:00Голоса, 50 шт.
412025-05-04T18:00:00Голоса, 100 шт.
1122025-05-03T20:00:00VK Музыка, месяц
1022025-05-03T20:00:00Стикеры «Лисы»

Ожидаемый ответ

user_idfirst_itemtx_72h
1Стикеры «Котики»3
2Стикеры «Лисы»2
Как проверяем Ваш запрос выполняется в PostgreSQL 16 прямо в браузере на 5 наборах данных: пример выше и скрытые — с NULL, повторами и пустыми таблицами. Нужен один SELECT, можно с WITH. Сравниваем значения по порядку колонок, названия колонок могут быть свои. Порядок строк важен — как задано в условии.
user_id, first_item, tx_72h
оконные функциидатытоп-N в группеJOIN

Источник: тестовое продуктового аналитика (Middle) во ВКонтакте, сборник No Data No Growth. Условие пересказано своими словами.