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

Gruppér og tæl hændelser pr. tidsintervaller plus løbende total

Brug date_trunc() at afkorte tidsstempler til måneden og dække både år og måned i en enkelt kolonne. Du kan bruge to_char() for at formatere det som du vil.

For at få det løbende tal, du nævner i dit tillægsspørgsmål, skal du tilføje en vinduefunktion :

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 for Psotgres 9.6
db<>violin d964>e for Postgres 12

Vinduesfunktioner udføres efter aggregatfunktioner, så vi kan køre en vinduesfunktion over et aggregat på samme forespørgselsniveau. Relateret:

Det er vigtigt at bruge det samme grundlæggende udtryk i vinduesfunktionen og i GROUP BY :date_trunc('month', period_start) .



  1. øge rækkenummeret, når værdien af ​​feltet ændres i Oracle

  2. Returnering af poster fra de sidste 3 måneder kun i MySQL

  3. Skadelige, gennemgående SQL Server-ydeevnemyter

  4. psql-klient kan være et skakbræt nu...