2013-05-07 44 views
1

我有一個客戶表和一個訂單表。SQL選擇查詢以根據關聯表的最大值來訂購結果

Customers表有字段:id, name, status_id

Orders表和字段:id, customer_id, order_date

每個客戶可以有很多訂單

我想知道是否有一個SQL查詢,從而可以selectcustomersorder 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 

蒂姆和簡是約翰之前,因爲他們有一個Jane的前一個訂單(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 

但一些客戶出現多次。

非常感謝您的幫助, 菲爾

+1

是的,它是可能的(最次但是我沒有看到任何嘗試... – 2013-05-07 05:33:26

+0

感謝米奇。你介意分享一個這樣做的查詢的例子嗎?謝謝。 – Phil 2013-05-07 05:37:21

+0

也許你應該嘗試一下。如果你表現出一些努力,人們將更有可能幫助你。 – 2013-05-07 05:37:55

回答

-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 
+0

它可能不會給出結果,但它可以讓他開始,最好是建議一些事情,而不是僅僅評論他人的答案,如果你覺得這不是正確的答案,請不要在這個查詢中有什麼問題。 – 2013-05-07 05:45:26

+0

謝謝Dharmesh Patel,這就像我試過的東西。它正確地獲得訂單,但有些客戶多次出現。我想我可能需要一個GROUP BY的地方。每個客戶應該只出現一次。 – Phil 2013-05-07 05:48:55

+0

是的,你需要將它們分組,對不起,不要把它,我會編輯我的帖子,謝謝 – 2013-05-07 05:50:29

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