PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Agrupe e conte eventos por intervalos de tempo, mais o total em execução


Use date_trunc() para truncar registros de data e hora para o mês e cobrir o ano e o mês em uma única coluna. Você pode usar to_char() para formatá-lo da maneira que desejar.

Para obter a contagem corrente que você mencionou em sua pergunta complementar, adicione uma função de janela :
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 aqui para Postgres 12

As funções da janela são executadas depois funções agregadas, para que possamos executar uma função de janela sobre uma agregação no mesmo nível de consulta. Relacionado:

É essencial usar a mesma expressão básica na função de janela e em GROUP BY :date_trunc('month', period_start) .