#mysql #group-by #inner-join
#mysql #группировать по #внутреннее объединение
Вопрос:
У меня есть рестораны. Итак, у меня есть таблица «меню» и таблица «заказы». Я хочу найти, когда данное блюдо было заказано последним. Итак, я знаю, что в какой-то момент мне придется использовать group by dishId, но все, что я пытаюсь, возвращает ошибку. Следующий запрос работает, но он возвращает дубликаты. Мне нужен только самый последний экземпляр для каждого блюда. Обратите внимание, что моя таблица «заказы» содержит информацию о клиентах, которая меня в настоящее время не интересует.
select o.timestamp, m.*
from orders o
inner join menu m
on (o.dishId = m.dishId);
Ответ №1:
Я думаю, что проблема, с которой вы столкнулись здесь, заключается в том, что вам нужно включить каждый из столбцов, по которым вы хотите сгруппировать
select m.dishId, MAX(o.timestamp)
from orders o
inner join menu m
on (o.dishId = m.dishId)
group by m.dishId;
Если вы хотите сгруппировать по большему количеству столбцов, вы должны добавить их в обоих местах. Пример:
select m.dishId, m.dishName, MAX(o.timestamp)
from orders o
inner join menu m
on (o.dishId = m.dishId)
group by m.dishId, m.dishName;
Комментарии:
1. Первый пример содержит бесполезное объединение и может быть написан
SELECT o.dishId, MAX(o.timestamp) FROM orders o GROUP BY o.dishId