PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Bagaimana cara mengelompokkan cap waktu ke dalam pulau (berdasarkan celah sewenang-wenang)?

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?


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Fungsi Buat PostgreSQL

  2. EXECUTE...USING pernyataan di PL/pgSQL tidak bekerja dengan tipe record?

  3. Saat melakukan PITR, apakah mungkin untuk Menjeda/Melanjutkan di PostgreSQL ?

  4. PostgreSQL:Peningkatan otomatis berdasarkan batasan unik multi-kolom

  5. Tambahkan Bulan ke Tanggal di PostgreSQL