у нас есть таблица клиенты(ид имя адрес допустим), товары(ид название и т.п.), движение товара(тут у нас ид клиента товара дата количество сума), надо найти какие товары продались 1 января уникальные только ну и так же вывести имя покупателя и...

Соедините движения с товарами и клиентами, ограничьте дату полуоткрытым интервалом и выберите DISTINCT. При выводе покупателя уникальность будет по паре «товар — покупатель».

Короткий ответ

Что ответить на собеседовании

Соедините движения с товарами и клиентами, ограничьте дату полуоткрытым интервалом и выберите DISTINCT. При выводе покупателя уникальность будет по паре «товар — покупатель».

Подробный разбор

Ответ с пояснениями

Соедините движения с товарами и клиентами, ограничьте дату полуоткрытым интервалом и выберите DISTINCT. При выводе покупателя уникальность будет по паре «товар — покупатель».

Условие обрывается, поэтому ниже решение для явно указанной части. Предположим имена clients, products, movements и что положительное quantity означает продажу:

SELECT DISTINCT p.id, p.name, c.id AS client_id, c.name AS client_name
FROM movements m
JOIN products p ON p.id = m.product_id
JOIN clients c ON c.id = m.client_id
WHERE m.created_at >= :day_start
  AND m.created_at < :next_day_start
  AND m.quantity > 0;

Параметры задают 1 и 2 января нужного года в согласованном часовом поясе. Если в движениях есть не только продажи, фильтруйте тип операции. Для уникальных товаров без детализации покупателей уберите клиентские поля и JOIN: один товар может быть куплен несколькими людьми.

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

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

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

Подробнее