Атрибуция: последний платный канал перед покупкой

Senior SQL E-commerce

Условие задания

**Контекст:** Задание из собеса на product-аналитика в маркетплейсе. Нужно посчитать **last-paid-touch attribution** — какой платный канал (не organic) был последним, прежде чем пользователь совершил покупку.

**Данные:**

[см. код в задании]

**Правила атрибуции:**
- Платные каналы: те, что начинаются на `paid_*` (paid_google, paid_vk, paid_yandex)
- Окно атрибуции: 30 дней **до** покупки
- Если в окне не было ни одного платного клика → `attributed_channel = 'organic'`
- Если было несколько — берём **самый поздний по started_at** (last-paid-touch)

**Задание:** для каждой покупки вывести `purchase_id, user_id, purchased_at, amount, attributed_channel, attribution_lag_days` (дни от платного клика до покупки, 0 если organic).

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

Структура для ориентира — реальные значения из эталонного решения.

CREATE TABLE sessions (
  session_id   UUID PRIMARY KEY,
  user_id      BIGINT NOT NULL,
  started_at   TIMESTAMP NOT NULL,
  channel      VARCHAR(32)   -- 'organic', 'direct', 'paid_google', 'paid_vk', 'email', 'paid_yandex', 'referral'
);

CREATE TABLE purchases (
  purchase_id  UUID PRIMARY KEY,
  user_id      BIGINT NOT NULL,
  purchased_at TIMESTAMP NOT NULL,
  amount       NUMERIC(10,2) NOT NULL
);

Темы

attribution LAG marketing window-functions last-click

Подсказки

Все тестовые задания →

Частые вопросы

Какой уровень знаний нужен для задачи "Атрибуция: последний платный канал перед покупкой"?

Это задание для уровня Senior. Senior-уровень — глубокое понимание темы, опыт решения нестандартных задач, обсуждение trade-off на собеседовании.

На каких собеседованиях встречается такая задача?

Подобные задания в категории «SQL» регулярно дают на собеседованиях аналитика данных в Яндекс, Сбер, Ozon, Авито, Тинькофф, Wildberries, T-Bank, X5, ВТБ и других крупных IT-компаниях. Тематика: attribution, LAG, marketing, window-functions, last-click.

Сколько времени даётся на решение?

На реальном собеседовании на подобную задачу отводится 30-60 минут с обсуждением подходов, оптимизаций и trade-off. Для тренировки рекомендуем сначала решить самостоятельно, потом сверить с эталонным решением и подсказками.

Где ещё потренироваться по теме «SQL»?

На zasqlpython.ru есть 520+ SQL задач в песочнице с автопроверкой кода, конспекты SQL для аналитика, AI мок-собеседование с разбором ваших ответов.

← Все задания