在这里我可能需要一些帮助,我的sql知识足以应付,但并不令人惊讶,我会尽可能简单地分解它。
我有两张table: orders
以及
shippers orders
有很多 shippers
,由 orderno
柱 shippers
有一个 move_dt
列(订单发货的日期/时间)
我要分类 orders
最高的 move_dt
在 shippers
table。
换句话说:我想按发货日期/时间列出订单,并且每个订单只显示一次。
此查询为我提供多个订单示例,每个发货人对应一个:
select `orders`.*, `shippers`.`move_dt` from `orders`
join `shippers` on `shippers`.`orderno` = `orders`.`orderno`
order by `shippers`.`move_dt` desc
我需要做什么,使每个订单只显示一次?查询返回的结果数应与 select * from orders
但必须按发货人表中的最高移动日期排序。
我很高兴张贴表结构和任何其他相关信息,并有编辑我的职位,使它更清楚。
1条答案
按热度按时间7vhp5slm1#
方法1:
你可以
Group By
上orderno
字段;这将导致每个orderno
. 然后,你可以使用Max()
获取最大值的聚合函数move_dt
订单的值。最终,您可以根据最大值对结果进行排序move_dt
价值观。附加说明:
不要使用
Select *
; 总是喜欢使用要获取的列的名称。阅读:为什么选择*被认为是有害的?使用时
Group By
,我们需要确保Select
子句可以是聚合表达式,也可以是Group By
条款。do read:选择列表不在group by子句中,并且包含未聚合的列。。。。与sql不兼容\u mode=only \u full \u group by处理多表查询时,建议使用别名。
方法2:
我们可以使用相关子查询并获取最大值
move_dt
订单的值。这将消除Group by
,和Join
要求。现在,您可以指定orders
中的表Select
子句,而不用担心在Group By
条款: