Heim > Datenbank > MySQL-Tutorial > Wie erstelle ich in PostgreSQL eine laufende Zeilenanzahl für jede Minute, einschließlich inaktiver Minuten?

Wie erstelle ich in PostgreSQL eine laufende Zeilenanzahl für jede Minute, einschließlich inaktiver Minuten?

Barbara Streisand
Freigeben: 2025-01-19 01:02:12
Original
910 Leute haben es durchsucht

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.

How to Generate a Running Row Count in PostgreSQL for Each Minute, Including Inactive Minutes?

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage