PostgreSQL使用to_char进行后期电池聚合,如何将月份部分转换回日期

PostgreSQL使用to_char进行后期电池聚合,如何将月份部分转换回日期,sql,postgresql,sorting,date,casting,Sql,Postgresql,Sorting,Date,Casting,我使用以下命令将日期变量转换为YYYY和Mon select to_char(date, 'Mon') as month, extract(year from date) as year, v1, count(v2) as count from data group by 1,2,3 order by 2,1; 但是,当我按进行排序时,它不会正确排序数据。所以我想我必须将Mon转换成一个数字或返回到一个日期才能正确排序。

我使用以下命令将日期变量转换为YYYY和Mon

select
to_char(date, 'Mon')                     as month,
extract(year from date)                  as year,
v1,
count(v2) as count
from data
group by 1,2,3
order by 2,1;

但是,当我按进行排序时,它不会正确排序数据。所以我想我必须将Mon转换成一个数字或返回到一个日期才能正确排序。想法?

当然不是。它是按月份名称订购的

相反,只需按日期订购:

order by date
如果这是一个聚合查询,那么您将使用聚合函数:

order by min(date)

我将使用一个派生表,其中分组是在一个适当的日期值上完成的,并将其转换为仅用于显示目的:

select to_char(month_date, 'Mon' as month,
       extract(year from month_date) as year,
       v1,
       count
from (       
  select date_trunc('month', "date") as month_date
         v1,
         count(v2) as count
  from data
  group by 1,2
)
order by month_date

我之所以将日期变量分解为月份和年份,是因为我想按月份和年份分组。但是再一次…我如何以某种方式转换变量,这样我也可以按月份排序…而不仅仅是年份..@kri030。我实际上回答了这个问题<代码>订购依据日期的最小值(或最大值)。这个问题通常是在聚合查询中出现的,这就是为什么我要包含它。不要将日期分为月份和年份列。只需截断日期,只包含年和月函数。这里是日期(“月”,月,日)。从技术上讲,这是一个月的第一天。但结果就是你所需要的,结果仍然是一个有效的日期;因此,所有内置的日期处理仍然有效。