PostgreSQL: Menjana Kiraan Baris Berjalan Mengikut Minit, Termasuk Tempoh Tidak Aktif
Artikel ini menunjukkan cara menjana kiraan larian baris dalam jadual PostgreSQL untuk setiap minit, walaupun beberapa minit tidak mempunyai aktiviti.
Kaedah 1: Kiraan Larian untuk Minit Aktif Sahaja
Pendekatan ini menggunakan fungsi tetingkap untuk mengira kiraan larian bagi setiap minit apabila aktiviti wujud:
<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")
kumpulan baris mengikut minit. Fungsi count(*) OVER (ORDER BY date_trunc('minute', "when"))
menyediakan jumlah larian yang dipesan mengikut minit.
Kaedah 2: Termasuk Minit Tidak Aktif
Untuk memasukkan minit dengan aktiviti sifar, kami menggunakan generate_series
untuk mencipta urutan minit yang lengkap dan LEFT JOIN
untuk memasukkan kiraan:
<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>
CTE (cte
) mengumpulkan baris mengikut minit dan mengiranya. generate_series
mencipta satu siri minit yang merangkumi keseluruhan julat masa. LEFT JOIN
menggabungkan siri ini dengan kiraan daripada cte
dan COALESCE
mengendalikan minit tanpa aktiviti dengan menetapkan kiraan larian 0. sum() OVER (ORDER BY m.minute)
kemudian mengira jumlah kumulatif.
Atas ialah kandungan terperinci Bagaimana untuk Menjana Kiraan Baris Larian dalam PostgreSQL untuk Setiap Minit, Termasuk Minit Tidak Aktif?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!