从客户中选择总订单和最后订单

时间:2013-07-10 06:01:28

标签: sql join count informix

我想查找客户在截止日期和最后订单日期之前下达的订单总数。

客户

custome_id      customer_name
    1              JOHN
    2              ALEX

顺序

order_id       customer_id        order_date      status
   R1              1              06/06/2013      completed
   R2              1              05/29/2013      completed
   B1091           1              01/17/2011      canceled
   B2192           1              12/24/2010      completed

注意:order_id对于查找最后一个订单没有帮助,因为它们不是增量的

我正在尝试的查询是

select customer.customer_id, customer.customer_name, order.order_id as last_order_id, max(order.order_date) as maxOrderDate,
  sum( case when order.status='completed' then 1 else 0) as completed_orders,
  count( order_id) as total_orders 
  from customer as customer inner join order as order
  on customer.customer_id = order.customer_id
  where customer.id = 1
  group by customer.customer_id, customer.customer_name, order.order_id

期待结果为

 customer_id  customer_name  Last_order_id  maxOrderDate   completed_orders   total_orders
    1                JOHN        R1            06/06/2013             3              4

4 个答案:

答案 0 :(得分:2)

如果您想获得最后Order_ID,您需要将订单表与子查询联系起来,如下所示:

SELECT tbl.customer_id, tbl.customer_name, o.order_id,  MaxOrderDate, Completed_orders, Total_Order
FROM [ORDER] o
JOIN
( SELECT c.customer_id, c.customer_name, MAX(o.order_date) AS MaxOrderDate
     ,SUM(CASE WHEN o.status = 'completed' THEN 1 ELSE 0 END) AS Completed_orders
     ,COUNT(order_id) AS Total_Order
   FROM Customer c 
   JOIN [Order] o
     ON c.customer_id = o.customer_id
  WHERE c.customer_id = 1
  GROUP BY c.customer_id,c.customer_name
) tbl
ON o.CUSTOMER_ID = tbl.CUSTOMER_ID
AND o.order_date = tbl.MaxOrderDate

结果:

╔═════════════╦═══════════════╦══════════╦══════════════╦══════════════════╦═════════════╗
║ CUSTOMER_ID ║ CUSTOMER_NAME ║ ORDER_ID ║ MAXORDERDATE ║ COMPLETED_ORDERS ║ TOTAL_ORDER ║
╠═════════════╬═══════════════╬══════════╬══════════════╬══════════════════╬═════════════╣
║           1 ║ JOHN          ║ R1       ║ 06/06/2013   ║                3 ║           4 ║
╚═════════════╩═══════════════╩══════════╩══════════════╩══════════════════╩═════════════╝

请参阅this SQLFiddle

答案 1 :(得分:0)

select
customer_id,
MAX(order_date) as last_order_date,
count(*) as num_orders
from Order
group by customer_id

答案 2 :(得分:0)

SELECT o.order_id, o.customer_id, c.customer_name, MAX(o.order_date) 
FROM Order o
INNER JOIN Customer c ON c.custome_id = o.custome_id
WHERE o.status = 'completed'
GROUP BY o.customer_id
ORDER BY o.customer_id ASC;

答案 3 :(得分:0)

试试此代码并查看。

SELECT c.customerId,c.customerName,MAX(o.orderDate) as MaxOrderDate,SUM(case when o.status='completed' then 1 else 0) as completed_orders,
COUNT(o.orderId) as total_order FROM customer c JOIN order o ON c.customerId=o.customerId
Where c.customerId=1 
group by c.customerId,c.customerName
相关问题