Use date_trunc()
para truncar las marcas de tiempo hasta el mes y cubrir tanto el año como el mes en una sola columna. Puedes usar to_char()
para formatear eso como quieras.
Para obtener el recuento de ejecución que menciona en su pregunta complementaria, agregue una función de ventana :
SELECT to_char(date_trunc('month', period_start), 'Mon YYYY') AS month
, count(*) AS month_ct
, sum(count(*)) OVER (ORDER BY date_trunc('month', period_start)) AS running_ct
FROM activity_log
WHERE action = 'create_entry'
GROUP BY date_trunc('month', period_start);
sqlfiddle
para Psotgres 9.6
db<>fiddle aquí
para Postgres 12
Las funciones de ventana se ejecutan después funciones agregadas, por lo que podemos ejecutar una función de ventana sobre un agregado en el mismo nivel de consulta. Relacionado:
Es esencial usar la misma expresión básica en la función de ventana y en GROUP BY
:date_trunc('month', period_start)
.