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?