PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Gruppieren und zählen Sie Ereignisse nach Zeitintervallen plus laufende Summe

Verwenden Sie date_trunc() um Zeitstempel auf den Monat zu kürzen und sowohl Jahr als auch Monat in einer einzigen Spalte abzudecken. Sie können to_char() verwenden um es beliebig zu formatieren.

Um die laufende Zählung zu erhalten, die Sie in Ihrer Zusatzfrage erwähnen, fügen Sie eine Fensterfunktion :

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 für Psotgres 9.6
db<>fiddle hier für Postgres 12

Fensterfunktionen werden nach ausgeführt Aggregatfunktionen, sodass wir eine Fensterfunktion über ein Aggregat auf derselben Abfrageebene ausführen können. Verwandte:

Es ist wichtig, denselben grundlegenden Ausdruck in der Fensterfunktion und in GROUP BY zu verwenden :date_trunc('month', period_start) .