PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Regrouper et compter les événements par intervalles de temps, plus le total cumulé

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