2012-09-17 58 views
2

我正在使用Derby數據庫。如何在查詢Derby時指定組內結果的順序?

我有這樣的一個表:

TB_ORDERS 
BUYER_NAME DATE_CREATED OTHER_COLLUMS ...... 
--------------------------------------------- 
DAVID  2012-09-01   ---- 
PETER  2012-09-14   ---- 
DAVID  2012-09-05   ---- 
PETER  2012-09-02   ---- 
DAVID  2012-08-15   ---- 
MARY  2012-09-02   ---- 
MARY  2012-09-15   ---- 

我想獲得由BUYER_NAME分組結果,其中每個小組應由DATE_CREATED訂購併最終一切由集團最近日期排序,就像這樣:

MARY 2012-09-15 
MARY 2012-09-12 
PETER 2012-09-14 
PETER 2012-09-02 
DAVID 2012-09-05 
DAVID 2012-09-01 
DAVID 2012-08-15 

正如您所看到的,Mary's Group擁有最近的date_created,因此它被置於頂端。 然後我們得到彼得的小組在第二位(請注意,彼得的小組日期「09-14」高於瑪麗的小組「09-12」上的一個日期。然而,彼得的小組被安置在瑪麗的小組之後,因爲每件事都應該由。該集團最近的日期

我想盡我知道有沒有成功的事情我得到的最接近是:

Select date_created, buyer_name 
From ORDERS 
Order By buyer_name,date_created Desc; 

然而,組不是由最近組日期排序

我應該在我的代碼中做到這一點,還是有更好的方法?

回答

1

此查詢將爲您帶來每個buyer_name的最新date_created以及您已有的結果集。如果您在您的訂購此新列By子句它應該做的伎倆:

Select o.date_created, o.buyer_name, 
     (select max(date_created) from orders where buyer_name = o.buyer_name) as most_recent_date 
From ORDERS o 
Order By most_recent_date, o.buyer_name, o.date_created Desc 
+0

謝謝恩裏克這樣一個優雅的解決方案! – Armando

+0

歡迎。如果它確實幫助了您,您可以通過點擊投票箭頭下方的勾號來始終將其選爲正確答案。 –

0

恩裏克,謝謝你,這麼一個完美的解決方案。在發佈問題之前,我已經嘗試了至少3天。

現在,我已經有了一個新的。當我嘗試爲每頁3個查詢進行分頁時,我在第一頁和第二頁中獲得Petter。爲了解決這個問題,我使用了一個子查詢,我選擇所有不同的由買方分組的date_created,這就是我的分頁位置。有用。但是,它不像您的那樣優雅高效。 這是我可憐的解決方案(我已經添加了一個新的生產線「WHERE」):

Select o.date_created, o.buyer_name, 
    (select max(date_created) from orders where buyer_name = o.buyer_name) as most_recent_date 
From ORDERS o 
    where buyer_name in (SELECT buyer_name FROM ORDERS WHERE date_created in (SELECT MAX(date_created) FROM ORDERS GROUP BY buyer_name ORDER BY 1 DESC OFFSET 3 ROWS FETCH NEXT 3 ROWS ONLY)) 
Order By most_recent_date, o.buyer_name, o.date_created ASC 

PS: the resultset shows the oldest date first and for that I am using a 
Collections.reverse(list); 

知識是好的,但想象中的更好。

再次爲您的時間,阿曼多

相關問題