在查看公司数据库中的订单时,我还希望找到发出我目前正在查看的订单的客户发出的第一个订单的order_id。
除此之外,这将有助于我知道我正在查看的订单是否是客户有史以来的第一个订单。
因此,例如,查看使用代金券的客户发出的所有订单" 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
答案 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子句选择另一个字段。