Mysql 使用内部联接和分组方式

Mysql 使用内部联接和分组方式,mysql,group-by,inner-join,Mysql,Group By,Inner Join,我有一家餐馆。所以我有一张“菜单”表和一张“订单”表。我想知道某道菜最近是什么时候点的。所以我知道我必须在某个时候使用GROUPBY dishId,但我尝试的每件事都会返回一个错误。下面的查询可以工作,但返回重复项。我只想要每道菜的最新实例。请注意,我的“订单”表包含我目前不感兴趣的客户信息 select o.timestamp, m.* from orders o inner join menu m on (o.dishId = m.dishId); 我认为你在这里遇到的问题是你需要

我有一家餐馆。所以我有一张“菜单”表和一张“订单”表。我想知道某道菜最近是什么时候点的。所以我知道我必须在某个时候使用GROUPBY dishId,但我尝试的每件事都会返回一个错误。下面的查询可以工作,但返回重复项。我只想要每道菜的最新实例。请注意,我的“订单”表包含我目前不感兴趣的客户信息

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

我认为你在这里遇到的问题是你需要包括你想要分组的每一列

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; 

第一个示例有一个无用的连接,可以编写
SELECT o.dishId,MAX(o.timestamp)FROM orders o GROUP BY o.dishId