Получение уникальных покупок до блокировки пользователя

Соедините покупки с пользователями, отфильтруйте время покупки раньше блокировки и удалите повторные пары 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). При истории банов и разблокировок нужен анализ интервалов, а не одно поле.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее