2017-01-11 318 views
0

任何人都可以請求幫助我按照預期對記錄進行排序(Postgres數據庫)嗎?按日期和月份排序日期,以便記錄按日期先排序然後按月排序

下面是我在整個日期的日期部分排序我的表之一的查詢結果(ORDER BY extract(DAY from cast(date as DATE))

注::所有日期爲YYYY-MM-DD格式

2016-03-01 
2016-09-01 
2016-08-01 
2016-12-01 
2016-01-01 
2016-07-01 
2016-11-01 
2016-02-01 
2016-06-01 
2016-10-01 
2016-04-01 
2016-05-01 
2016-07-22 
2016-08-22 
2016-10-22 
2016-09-22 
2016-11-22 
2016-12-22 

這很好,因爲它根據日期部分對記錄進行排序。但是,我想要的是,結果應該是這樣的,所有的記錄應該基於日期部分進行排序,因此所有來自日期1的記錄都在來自日期22的所有記錄之前,而且它應該對這兩個部分進行排序,即日期1和時間的記錄日期也是22個月的部分(如果你看看上面的結果集,你會注意到它是按日期部分排序,而不是按月份部分)。所以基本上,我想應該如下

2016-01-01 
2016-02-01 
2016-03-01 
2016-04-01 
2016-05-01 
2016-06-01 
2016-07-01 
2016-08-01 
2016-09-01 
2016-10-01 
2016-11-01 
2016-12-01 
2016-07-22 
2016-08-22 
2016-09-22 
2016-10-22 
2016-11-22 
2016-12-22 
+0

除了1和22之外,你有過任何日子嗎? –

+0

是的,我會的。但你的解決方案似乎工作 '訂單提取(日期從鑄(日期爲日期)),日期' – Hannan

回答

1

使用兩個步驟的順序,以及幾天的每個塊內再添排序結果:

ORDER BY extract(DAY from cast(date as DATE)),  -- first sort by day 
     date          -- then sort by date 

這種排序將會把當天的第一條記錄和其他人(即第22天)的記錄最後。在每個1/22日期的塊中,記錄按日期排序。

+0

嘿@Tim Biegeleisen,感謝您的解決方案。我只是很快用CASE語句厭倦了你的第一個解決方案,它對當前的結果集起作用。但是我擔心的是,如果日期不是1和22,那麼它會起作用。 – Hannan

+0

酷酷的這個作品的魅力。 thumsup: – Hannan