Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

264
Views
Consulta PG sql para ordenar por fecha formateada en orden descendente

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-15

El resultado esperado es

 monthName ----------- April 2021 March 2021 February 2021 January 2021 December 2020

Intenté 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?

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

El problema es que está tratando de ordenar por cadena, por lo que obtiene un orden alfabético. Lo que debes hacer:

  • Ordenar por año y mes
  • Luego formatee la fecha de la manera que desee

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 cte
over 4 years ago · Santiago Trujillo Report

0

primero 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.

over 4 years ago · Santiago Trujillo Report

0

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;
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!