Соедините движения с товарами и клиентами, ограничьте дату полуоткрытым интервалом и выберите DISTINCT. При выводе покупателя уникальность будет по паре «товар — покупатель».
у нас есть таблица клиенты(ид имя адрес допустим), товары(ид название и т.п.), движение товара(тут у нас ид клиента товара дата количество сума), надо найти какие товары продались 1 января уникальные только ну и так же вывести имя покупателя и...
Соедините движения с товарами и клиентами, ограничьте дату полуоткрытым интервалом и выберите 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: один товар может быть куплен несколькими людьми.