MYSQL SELECT最近的条目和JOIN表,每个订单号有多个项目

时间:2015-11-18 01:03:14

标签: mysql join subquery max

我已经广泛搜索了这个答案,并没有遇到任何符合我的SQL需求的其他问题/解决方案。因此,使用下面的两个表,我想找到每个客户的最新order_id,然后使用另一个表加入以获取订单明细(订单明细可能包含多个订单项)

客户表

customer    order_id    order_date
125         485695      1/10/2015
125         485696      2/10/2015
125         485697      3/10/2015
68          485700      6/10/2015
68          485701      12/21/2015
689         501200      8/10/2015
689         501201      8/11/2015
689         501202      8/12/2015

订单表

order_id    item     qty
485695      apple    1
485695      banana   2
485697      pumpkin  1
485697      apple    1
485700      pear     1
485701      pear     1
485701      plum     2
501200      banana   1
501201      orange   2
501202      apple    3
501202      pear     2
501202      orange   1

我正在寻找的结果将产生以下结果:

customer    order_id    order_date  item     qty
125         485697      3/10/2015   pumpkin  1
125         485697      3/10/2015   apple    1
68          485701      6/10/2015   pear     1
68          485701      6/10/2015   plum     2
689         501202      8/12/2015   apple    3
689         501202      8/12/2015   pear     2
689         501202      8/12/2015   orange   1

我尝试过类似的东西,但似乎没有办法:

SELECT c.customer, c.order_id, c.order_date, i.item, i.qty
FROM customers c
INNER JOIN items i ON c.order_id = i.order_id
WHERE c.order_id IN
(
SELECT max(order_id) 
           FROM customers
           GROUP BY order_id
           )
ORDER BY c.order_date DESC

非常感谢任何帮助。谢谢!

1 个答案:

答案 0 :(得分:0)

您走在正确的轨道上,您想要做的是按customer(ID)而不是order_id进行分组。

SELECT c.customer, c.order_id, c.order_date, i.item, i.qty
FROM customers c
INNER JOIN items i ON c.order_id = i.order_id
WHERE c.order_id IN
(
SELECT max(order_id) 
       FROM customers
       GROUP BY customer
       )
ORDER BY c.order_date DESC

当您按order_id分组时,每个order_id都包含在SELECT max(order_id)查询中,因此每个商品订单都包含在选择所有订单的WHERE子句中。< / p>