**Контекст:** Задание из собеса на 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. Для тренировки рекомендуем сначала решить самостоятельно, потом сверить с эталонным решением и подсказками.
На zasqlpython.ru есть 520+ SQL задач в песочнице с автопроверкой кода, конспекты SQL для аналитика, AI мок-собеседование с разбором ваших ответов.
← Все задания