sql >> Base de Datos >  >> RDS >> PostgreSQL

Agrupe y cuente eventos por intervalos de tiempo, más el total acumulado

Use date_trunc() para truncar las marcas de tiempo hasta el mes y cubrir tanto el año como el mes en una sola columna. Puedes usar to_char() para formatear eso como quieras.

Para obtener el recuento de ejecución que menciona en su pregunta complementaria, agregue una función de ventana :

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 aquí para Postgres 12

Las funciones de ventana se ejecutan después funciones agregadas, por lo que podemos ejecutar una función de ventana sobre un agregado en el mismo nivel de consulta. Relacionado:

Es esencial usar la misma expresión básica en la función de ventana y en GROUP BY :date_trunc('month', period_start) .