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