Вы заказываете текстовое представление месяца, здесь:
order by to_char(order_date, 'Mon') asc
Результатом to_char
является строка, поэтому порядок в алфавитном порядке; Postgres больше не знает, что это как-то связано с датами, поэтому нет причин ставить «jan» перед «apr».
Вы хотите сделать заказ по самой дате:
order by order_date asc
Или числовым представлением месяца, которое можно получить с помощью extract()
:
order by extract(month from order_date) asc
Обратите внимание, что, поскольку ваш DISTINCT
в настоящее время группируется на основе текстового представления, у вас могут возникнуть проблемы с тем, чтобы SELECT
и ORDER BY
использовали разные представления. Это будет проще с явным GROUP BY
, который может перечислить оба представления:
group by extract(month from order_date), to_char(order_date, 'Mon')
Поскольку вы можете быть уверены, что данный order_date
не может создать отдельное значение для этих двух столбцов, это не изменит количество строк, но позволит вам написать это:
select to_char(order_date, 'Mon')
from meta.ship_error
group by extract(month from order_date), to_char(order_date, 'Mon')
order by extract(month from order_date);
person
IMSoP
schedule
14.05.2015