【问题标题】:MYSQL SELECT most recent entry and JOIN table with multiple items per Order NumberMYSQL SELECT 最近的条目和 JOIN 表,每个订单号有多个项目
【发布时间】:2016-02-19 14:18:35
【问题描述】:

我已经广泛搜索了这个答案,但没有遇到任何其他符合我的 SQL 需求的问题/解决方案。因此,通过下面的两个表,我想找到每个客户最近的 order_id,然后与另一个表 JOIN 以获取订单详细信息(订单详细信息可能包括多个订单项)

客户表

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

任何帮助将不胜感激。谢谢!

【问题讨论】:

    标签: mysql join subquery max


    【解决方案1】:

    您在正确的轨道上,您要做的是按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 子句中选择所有订单。

    【讨论】:

    • 感谢您的反馈。你知道是否有更快的方法来获得我正在寻找的结果?这些表中的每一个都有相当大量的数据,所以更快的东西是理想的。它不一定需要按照我的目标方法来完成,它只是第一个有点意义的方法。谢谢您的帮助! @Cariboutis
    • 我不确定更快的方法。您可以将客户分组并在客户表的FROM 语句中获取最大 order_id,但这可能不会更快。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-08
    • 2016-10-27
    • 2022-07-12
    • 2021-10-31
    • 1970-01-01
    相关资源
    最近更新 更多