SQL select查询根据关联表的最大值对结果进行排序

时间:2013-05-07 05:32:14

标签: sql sql-order-by

我有客户表和订单表。

客户表格包含字段:id, name, status_id

订单表包含字段:id, customer_id, order_date

每个客户都可以拥有多个订单。

我想知道是否有一个SQL查询可以select所有customers order by status_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  
蒂姆和简在约翰之前,因为他们的地位为1.简在蒂姆之前,因为她的最后一个订单(2012-12-01)比蒂姆的更早(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

但有些客户多次出现。

非常感谢你的帮助, 菲尔

2 个答案:

答案 0 :(得分: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 Fiddle

答案 1 :(得分:-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