我有一个客户表和一个订单表。
客户表具有以下字段: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
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
但有些客户多次出现。
非常感谢您的帮助,菲尔