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

Pilih data untuk jendela 15 menit - PostgreSQL

Cara cepat dan kotor:http://sqlfiddle.com/#!1/bd2f6/21 Saya menamai kolom saya tstamp alih-alih timestamp

with t as (
  select
    generate_series(mitstamp,matstamp,'15 minutes') as int,
    duration
  from
    (select min(tstamp) mitstamp, max(tstamp) as matstamp from tmp) a,
    (select duration from tmp group by duration) b
)

select
  int as timestampwindowstart,
  t.duration,
  count(tmp.duration)
from
   t
   left join tmp on 
         (tmp.tstamp >= t.int and 
          tmp.tstamp < (t.int + interval '15 minutes') and 
          t.duration = tmp.duration)
group by
  int,
  t.duration
order by
  int,
  t.duration

Penjelasan singkat:

  1. Menghitung stempel waktu minimum dan maksimum
  2. Buat interval 15 menit antara minimum dan maksimum
  3. Hasil gabungan silang dengan nilai durasi yang unik
  4. Data asli gabung kiri (gabung kiri penting, karena ini akan menyimpan semua kemungkinan kombinasi dalam output dan akan ada null di mana durasi tidak ada untuk interval tertentu.
  5. Data gabungan. count(null)=0

Jika Anda memiliki lebih banyak tabel dan algoritme harus diterapkan pada gabungannya. Misalkan kita memiliki tiga tabel tmp1, tmp2, tmp3 semua dengan kolom tstamp dan duration . Kami dapat memperluas solusi sebelumnya:

with 

tmpout as (
  select * from tmp1 union all
  select * from tmp2 union all
  select * from tmp3
)

,t as (
  select
    generate_series(mitstamp,matstamp,'15 minutes') as int,
    duration
  from
    (select min(tstamp) mitstamp, max(tstamp) as matstamp from tmpout) a,
    (select duration from tmpout group by duration) b
)

select
  int as timestampwindowstart,
  t.duration,
  count(tmp.duration)
from
   t
   left join tmpout on 
         (tmp.tstamp >= t.int and 
          tmp.tstamp < (t.int + interval '15 minutes') and 
          t.duration = tmp.duration)
group by
  int,
  t.duration
order by
  int,
  t.duration

Anda harus benar-benar tahu with klausa di PostgreSQL. Ini adalah konsep yang sangat berharga untuk analisis data apa pun di 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. Cara Menghitung Perbedaan Antara Dua Timestamp di PostgreSQL

  2. Segarkan tampilan yang terwujud:Konkurensi, perilaku transaksional

  3. DENGARKAN batas waktu kueri dengan node-postgres?

  4. Nama tabel atau kolom tidak boleh diawali dengan angka?

  5. Bagaimana cara menggunakan Postgres jsonb '?' operator di Laravel dengan dukungan indeks?