Estoy tratando de ordenar el nombre del mes y el año en orden descendente. La columna de fecha en la tabla es la siguiente
orderdate ---------- 2020-12-15 2021-01-15 2021-02-15 2021-02-20 2021-03-21 2021-03-29 2021-04-15El resultado esperado es
monthName ----------- April 2021 March 2021 February 2021 January 2021 December 2020Intenté esta consulta
select distinct to_char(orderdate::date,'FMMonth YYYY') as monthName from table order by to_char(orderdate::date,'FMMonth YYYY') desc;La consulta anterior me da el resultado como
monthName ----------- March 2021 January 2021 February 2021 December 2020 April 2021¿Cómo obtengo el resultado esperado de la consulta?
El problema es que está tratando de ordenar por cadena, por lo que obtiene un orden alfabético. Lo que debes hacer:
Prueba este:
select to_char(trunc_date,'FMMonth YYYY') from ( select distinct date_trunc('month', orderdate) as trunc_date from table order by trunc_date desc ) as cteprimero debe ordenar por año, luego mes como número de mes:
select distinct to_char(orderdate::date,'FMMonth YYYY') as monthName from table order by to_char(orderdate::date,'YYYY MM') desc;lo siento, no estoy lo suficientemente familiarizado con psql para saber el formato de fecha, solo supuse que MM es un mes de dos dígitos.
Suponiendo que la orderdate contiene texto formateado (lo cual es una mala idea por cierto), entonces
select to_char(omonth, 'FMMonth YYYY') "monthName" from (select distinct to_date(orderdate, 'yyyy-mm') omonth from the_table) t order by omonth desc; Si el tipo de fecha de orderdate es date , entonces
select to_char(omonth, 'FMMonth YYYY') "monthName" from (select distinct date_trunc('month', orderdate) omonth from the_table) t order by omonth desc;