我有客户表和订单表。
客户表格包含字段: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
但有些客户多次出现。
非常感谢你的帮助, 菲尔
答案 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