Ini akan melakukannya:
SELECT done, count(*) FILTER (WHERE step) OVER (ORDER BY done) AS grp
FROM (
SELECT done
, (lag(done) OVER (ORDER BY done) <= done - interval '2 min') AS step
FROM tbl
) sub
ORDER BY done;
Subkueri sub
merekam step
sebagai true
jika baris sebelumnya berjarak minimal 2 menit - diurutkan berdasarkan kolom stempel waktu done
sendiri dalam hal ini.
Kueri luar menambahkan hitungan langkah, secara efektif nomor grup (grp
) - menggabungkan FILTER
aggregate agregat klausa dengan fungsi jendela lain.
db<>main biola di sini
Terkait:
- Kueri untuk menemukan semua stempel waktu lebih dari interval tertentu
- Bagaimana cara memberi label grup di postgresql ketika kepemilikan grup bergantung pada baris sebelumnya?
- Pilih urutan kontinu terpanjang
- Pengelompokan atau Jendela
Tentang agregat FILTER
klausa:
- Bagaimana cara menyederhanakan kueri statistik game ini?
- Fungsi lead/lag bersyarat PostgreSQL?