Utilisez date_trunc()
pour tronquer les horodatages au mois et couvrir à la fois l'année et le mois dans une seule colonne. Vous pouvez utiliser to_char()
pour le formater comme bon vous semble.
Pour obtenir le décompte courant que vous mentionnez dans votre question supplémentaire, ajoutez une fonction de fenêtre :
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
pour Psotgres 9.6
db<>violon ici
pour Postgres 12
Les fonctions de fenêtre sont exécutées après fonctions d'agrégation, afin que nous puissions exécuter une fonction de fenêtre sur un agrégat au même niveau de requête. Connexe :
Il est essentiel d'utiliser la même expression de base dans la fonction window et dans GROUP BY
:date_trunc('month', period_start)
.