Соедините покупки с пользователями, отфильтруйте время покупки раньше блокировки и удалите повторные пары user_id–product_id. Схема в условии отсутствует, поэтому имена полей нужно явно согласовать.
Получение уникальных покупок до блокировки пользователя
Соедините покупки с пользователями, отфильтруйте время покупки раньше блокировки и удалите повторные пары user_id–product_id. Схема в условии отсутствует, поэтому имена полей нужно явно согласовать.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
В базе данных имеется следующая схема. Требуется сформировать список уникальных пар (пользователь, id товара) для всех транзакций, выполненных пользователями до того момента, когда они были забанены. Список должен быть упорядочен сначала по имени пользователя, затем по идентификатору товара.
Ответ
Соедините покупки с пользователями, отфильтруйте время покупки раньше блокировки и удалите повторные пары user_id–product_id. Схема в условии отсутствует, поэтому имена полей нужно явно согласовать.
Пример при единственной блокировке users.banned_at и времени transactions.created_at:
SELECT DISTINCT u.id, u.name, t.product_id
FROM users AS u
JOIN transactions AS t ON t.user_id = u.id
WHERE u.banned_at IS NOT NULL
AND t.created_at < u.banned_at
ORDER BY u.name, t.product_id, u.id;
Здесь участвуют именно забаненные пользователи. Для включения никогда не заблокированных замените условие на (u.banned_at IS NULL OR t.created_at < u.banned_at). При истории банов и разблокировок нужен анализ интервалов, а не одно поле.