【问题标题】:Mysql query, select last orderMysql查询,选择最后一个订单
【发布时间】:2013-10-15 20:10:42
【问题描述】:

我正在尝试选择所有客户购买的最后一个订单,真正的目的是添加一个特定范围,例如过去 3 个月,并考虑过去 3 个月内任何客户的最后一个订单,但没有订单早于那 3 个月,到目前为止我有这个:

SELECT zen_orders.orders_id, zen_customers.customers_id,
    zen_orders.date_purchased,  zen_orders.orders_status
FROM  zen_orders 
INNER JOIN zen_customers
ON zen_orders.customers_id = zen_customers.customers_id
    AND zen_orders.orders_status = '3'
ORDER BY zen_customers.customers_id

我对 mysql 很陌生,现在这会返回所有客户的所有订单,当一个客户超过一个订单时,它会重复几行具有不同订单 ID 但相同客户 ID 的行,但现在我如何隔离只是所有有订单的客户的最后一个订单,以便我可以把它放在一个范围内?

【问题讨论】:

    标签: mysql zen-cart


    【解决方案1】:
    select o.orders_id,o.customers_id,
        o.date_purchased,  o.orders_status from
    (
        select max(o.orders_id) maxOrder,o.customer_id
        FROM  zen_orders o
        where o.orders_status = '3'
        group by o.customers_id
    ) t
    inner join zen_orders o on o.orders_id = t.maxOrder
    

    【讨论】:

    • 嗨,这对我来说是高级的,我不明白如何对此草稿进行必要的更改,以便我可以运行查询:\
    • 你知道group by子句吗?
    • 很少,但我明白你在那里做了什么,我现在正在研究组的例子
    • 您为每个客户选择最大订单,然后将其用作派生表(子查询)以再次将其与 zen_orders 表连接以检索其余数据。
    • 但是我可以使用 max 来选择最大购买日期(这将是每个客户的最后一个订单)吗?
    【解决方案2】:

    显示超过 30 天且不超过 60 天的客户信息和订单信息。

     SELECT C.customers_id, C.customers_firstname, C.customers_lastname,  
        O.date_purchased, O.orders_id, O.order_total, OS.orders_status_name
            FROM  orders O
            LEFT join customers C on C.customers_id = O.customers_id
            LEFT join orders_status OS on OS.orders_status_id=O.orders_status
            WHERE 
               O.date_purchased BETWEEN DATE_SUB(NOW(), INTERVAL 2 MONTH) AND DATE_SUB(NOW(), INTERVAL 1 MONTH)
     GROUP BY C.customers_id
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-13
      • 1970-01-01
      • 2011-09-04
      • 1970-01-01
      • 1970-01-01
      • 2011-05-02
      • 1970-01-01
      • 2010-12-25
      相关资源
      最近更新 更多