2017-01-11 272 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