SQL - 在查看任何订单时选择客户订单的第一个出现

时间:2014-09-08 04:05:42

标签: mysql sql

在查看公司数据库中的订单时,我还希望找到发出我目前正在查看的订单的客户发出的第一个订单的order_id。

除此之外,这将有助于我知道我正在查看的订单是否是客户有史以来的第一个订单。

  • 订单存储在database.orders中。订单具有唯一的order_id(int 10)并包含customer_id列。我通常按​​不同的标准(价格,使用的凭证代码,日期......)对订单进行排序。
  • 客户存储在database.customers中。客户拥有唯一的客户ID(int 10)。

因此,例如,查看使用代金券的客户发出的所有订单" VOUCHER123"或" COUPON123"价格高于1000欧元,我想得到

order_id  | customer_id | voucher_code | price | order_id_first_order_ever
1000      | 50          | coupon123    | 1300  | 845
1100      | 56          | voucher123   | 2005  | 1100

我真的不知道怎么做最后一栏。我应该使用内部请求吗?只有一个请求可行吗?

我对此感到非常困惑,我们非常欢迎任何协助。

我正在使用My SQL Workbench。

致以最诚挚的问候,

Jean-Baptiste

3 个答案:

答案 0 :(得分:0)

如果我对您的问题的理解是正确的,那么下面的查询应该会给您预期的结果。

SELECT order_id, customer_id, voucher_code, price, order_id_first_order_ever 
FROM orders 
WHERE voucher_code="voucher123" AND price>1000;

答案 1 :(得分:0)

我找到了自己问题的答案。

解决方案是在主表上使用内部联接,如下所示:

SELECT
    database.orders.order_id,
    database.customers.customer_id,
    database.orders.voucher_code,
    database.orders.price,
    MIN(previous_orders.order_id) AS "order_id_first_order_ever"
FROM
    database.orders,
    INNER JOIN database.customers ON database.customers.customer_id = database.orders.customer_id
    INNER JOIN database.orders AS previous_orders ON database.orders.customer_id = previous_order.customer_id**
WHERE
    database.orders.voucher_code = "voucher123" OR
    database.orders.voucher_code = "coupon123"
GROUP BY
    database.orders.order_id

它产生了我想要的东西:)

答案 2 :(得分:0)

假设早期订单的order_id值较小:

select order_id, 
       customer_id, 
       voucher_code, 
       price,
       (select order_id 
         where t1.customer_id = t2.customer_id  
          from database.orders t2 
      order by order_id limit 1) as 'order_id_first_order_ever' 
  from database.orders t1 
 where voucher_code in ("VOUCHER123", "COUPON123") 
   and price > 1000 
 order by order_id;

对于不增加单调的order_id,必须为子选择中的order by子句选择另一个字段。