PostgreSQL: Generieren einer laufenden Zeilenanzahl pro Minute, einschließlich inaktiver Zeiträume
In diesem Artikel wird gezeigt, wie Sie für jede Minute eine laufende Anzahl von Zeilen in einer PostgreSQL-Tabelle generieren, auch wenn einige Minuten keine Aktivität aufweisen.
Methode 1: Laufende Zählung nur für aktive Minuten
Dieser Ansatz verwendet Fensterfunktionen, um eine laufende Zählung für jede Minute zu berechnen, in der Aktivität vorliegt:
<code class="language-sql">SELECT DISTINCT date_trunc('minute', "when") AS minute, count(*) OVER (ORDER BY date_trunc('minute', "when")) AS running_count FROM mytable ORDER BY 1;</code>
date_trunc('minute', "when")
gruppiert Zeilen nach Minute. Die Funktion count(*) OVER (ORDER BY date_trunc('minute', "when"))
liefert eine laufende Summe, geordnet nach Minuten.
Methode 2: Inaktive Minuten einbeziehen
Um Minuten ohne Aktivität einzubeziehen, verwenden wir generate_series
, um eine vollständige Minutensequenz zu erstellen, und ein LEFT JOIN
, um die Zählungen einzubeziehen:
<code class="language-sql">WITH cte AS ( SELECT date_trunc('minute', "when") AS minute, COUNT(*) AS minute_ct FROM mytable GROUP BY 1 ) SELECT m.minute, COALESCE(sum(cte.minute_ct) OVER (ORDER BY m.minute), 0) AS running_count FROM ( SELECT generate_series(min(minute), max(minute), interval '1 min') AS minute FROM cte ) m LEFT JOIN cte USING (minute) ORDER BY 1;</code>
Ein CTE (cte
) gruppiert Zeilen nach Minuten und zählt sie. generate_series
erstellt eine Minutenreihe über den gesamten Zeitbereich. Das LEFT JOIN
kombiniert diese Reihe mit den Zählungen von cte
und COALESCE
verarbeitet Minuten ohne Aktivität, indem es eine laufende Zählung von 0 zuweist. Das sum() OVER (ORDER BY m.minute)
berechnet dann die kumulative Summe.
Das obige ist der detaillierte Inhalt vonWie erstelle ich in PostgreSQL eine laufende Zeilenanzahl für jede Minute, einschließlich inaktiver Minuten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!