PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Raggruppa e conta gli eventi per intervalli di tempo, più il totale parziale

Usa date_trunc() per troncare i timestamp al mese e coprire sia l'anno che il mese in un'unica colonna. Puoi usare to_char() per formattarlo come preferisci.

Per ottenere il conteggio progressivo che menzioni nella tua domanda supplementare, aggiungi una funzione finestra :

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 per Psotgres 9.6
db<>violino qui per Postgres 12

Le funzioni della finestra vengono eseguite dopo funzioni aggregate, in modo da poter eseguire una funzione finestra su un aggregato nello stesso livello di query. Correlati:

È essenziale utilizzare la stessa espressione di base nella funzione finestra e in GROUP BY :date_trunc('month', period_start) .