2

我想找到客户截至日期和最后一个订单日期的订单总数。

顾客

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

4 回答 4

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 ║
╚═════════════╩═══════════════╩══════════╩══════════════╩══════════════════╩═════════════╝

看到这个 SQLFiddle

于 2013-07-10T06:14:32.243 回答
0
select
customer_id,
MAX(order_date) as last_order_date,
count(*) as num_orders
from Order
group by customer_id
于 2013-07-10T06:11:22.940 回答
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;
于 2013-07-10T06:11:48.000 回答
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
于 2013-07-10T06:20:57.053 回答