1

我有一个客户表和一个订单表。

客户表具有以下字段:id, name, status_id

订单表具有以下字段:id, customer_id, order_date

每个客户可以有许多订单。

我想知道是否有一个 sql 查询可以获取他们订单的select所有customers order bystatus_id 和最后一个 order_date。

因此,结果将首先列出所有状态为1 的客户,并在其中列出从最近订单最近的客户到最近订单最近的客户。然后它将以相同的方式列出状态为 2 的那些,然后以相同的方式列出状态为 3 的那些。在整个列表中,每个客户应该只出现一次。

例如。

客户表

id, name, status_id

1, john, 2  
2, jane, 1  
3, tim, 1  

订单表

id, customer_id, date

1, 1, 2013-01-01  
2, 1, 2011-10-01  
3, 2, 2012-12-01  
4, 2, 2010-03-10  
5, 3, 2011-02-21  
6, 3, 2012-01-11  

查询应该给出这样的客户列表

2 jane  
3 tim  
1 john  

Tim 和 Jane 位于 john 之前,因为他们的状态为 1。Jane 位于 Tim 之前,因为她的最后一个订单 (2012-12-01) 比 Tim 的 (2012-01-11) 更新。

我试过这个

SELECT customers.id, customers.name, customers.status_id
FROM customers
JOIN orders ON customers.id = orders.customer_id 
ORDER BY customers.status_id, orders.date

但有些客户多次出现。

非常感谢您的帮助,菲尔

4

2 回答 2

2

试试下面Query

select cus.id as ID, cus.name as Name
from
customer cus
inner join order1 ord on cus.id=ord.customer_id
group by cus.id, cus.name,cus.status_id 
order by cus.status_id asc,max(ord.date)desc

SQL小提琴

于 2013-05-07T06:01:06.217 回答
-1

尝试:

SELECT custome.id, customer.name FROM customer JOIN 
    `order` ON customer.id = `order`.customer_id GROUP BY customer.id ORDER BY customer.status, `order`.date DESC
于 2013-05-07T05:38:55.983 回答