按日期和月份的顺序对日期进行排序,使记录按日期排序,然后按月排序

时间:2017-01-11 10:53:47

标签: sql postgresql sorting datetime

有人可以帮我按预期排序记录(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

1 个答案:

答案 0 :(得分:1)

使用两步排序,只需在每个日期块中添加另一种排序:

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

此排序将第1天记录放在第一位,其他记录(即第22天)记录最后。在每个1/22日期的区块内,记录按日期递增排序。