Использование внутреннего объединения и группирования по - PullRequest
1 голос
/ 11 ноября 2011

У меня есть рестораны.Итак, у меня есть таблица «меню» и таблица «заказов».Я хочу узнать, когда данное блюдо было заказано совсем недавно.Так что я знаю, что в какой-то момент я должен использовать group by dishId, но все, что я пробую, возвращает ошибку.Следующий запрос работает, но он возвращает дубликаты.Я хочу только самый последний экземпляр для каждого блюда.Обратите внимание, что моя таблица «заказов» содержит информацию о клиентах, которая меня не интересует.

select o.timestamp, m.* 
from orders o 
inner join menu m 
on (o.dishId = m.dishId); 

1 Ответ

0 голосов
/ 11 ноября 2011

Я думаю, что проблема, с которой вы здесь столкнулись, заключается в том, что вам нужно включить каждый столбец, который вы хотите сгруппировать, по

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; 
...