sql >> Databasteknik >  >> RDS >> PostgreSQL

Gruppera och räkna händelser per tidsintervall, plus löpande total

Använd date_trunc() att trunkera tidsstämplar till månaden och täcka både år och månad i en enda kolumn. Du kan använda to_char() för att formatera det som du vill.

För att få det löpande antalet du nämner i din tilläggsfråga, lägg till en fönsterfunktion :

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<>fiol d964>e för Postgres 12

Fönsterfunktioner exekveras efter aggregatfunktioner, så att vi kan köra en fönsterfunktion över ett aggregat på samma frågenivå. Relaterat:

Det är viktigt att använda samma grundläggande uttryck i fönsterfunktionen och i GROUP BY :date_trunc('month', period_start) .



  1. Skapa/infoga Json i Postgres med förfrågningar och psycopg2

  2. Hur man skapar en kommentar till en Oracle-databasvy

  3. Använda en .php-fil för att generera en MySQL-dump

  4. @@Fetch_status i postgreSQL