Saya memiliki situasi yang saya pikir dapat diselesaikan menggunakan fungsi jendela tapi saya tidak yakin.
Bayangkan tabel berikut
CREATE TABLE tmp
( date timestamp,
id_type integer
) ;
INSERT INTO tmp
( date, id_type )
VALUES
( '2017-01-10 07:19:21.0', 3 ),
( '2017-01-10 07:19:22.0', 3 ),
( '2017-01-10 07:19:23.1', 3 ),
( '2017-01-10 07:19:24.1', 3 ),
( '2017-01-10 07:19:25.0', 3 ),
( '2017-01-10 07:19:26.0', 5 ),
( '2017-01-10 07:19:27.1', 3 ),
( '2017-01-10 07:19:28.0', 5 ),
( '2017-01-10 07:19:29.0', 5 ),
( '2017-01-10 07:19:30.1', 3 ),
( '2017-01-10 07:19:31.0', 5 ),
( '2017-01-10 07:19:32.0', 3 ),
( '2017-01-10 07:19:33.1', 5 ),
( '2017-01-10 07:19:35.0', 5 ),
( '2017-01-10 07:19:36.1', 5 ),
( '2017-01-10 07:19:37.1', 5 )
;
Saya ingin memiliki grup baru di setiap perubahan pada kolom id_type. EG Grup 1 dari 7:19:21 hingga 7:19:25, ke-2 dimulai dan berakhir pada 7:19:26, dan seterusnya.
Setelah berhasil, saya ingin memasukkan lebih banyak kriteria untuk mendefinisikan grup.
Saat ini, gunakan kueri di bawah ...
SELECT distinct
min(min(date)) over w as begin,
max(max(date)) over w as end,
id_type
from tmp
GROUP BY id_type
WINDOW w as (PARTITION BY id_type)
order by begin;
Saya mendapatkan hasil sebagai berikut:
begin end id_type
2017-01-10 07:19:21.0 2017-01-10 07:19:32.0 3
2017-01-10 07:19:26.0 2017-01-10 07:19:37.1 5
Sementara saya suka:
begin end id_type
2017-01-10 07:19:21.0 2017-01-10 07:19:25.0 3
2017-01-10 07:19:26.0 2017-01-10 07:19:26.0 5
2017-01-10 07:19:27.1 2017-01-10 07:19:27.1 3
2017-01-10 07:19:28.0 2017-01-10 07:19:29.0 5
2017-01-10 07:19:30.1 2017-01-10 07:19:30.1 3
2017-01-10 07:19:31.0 2017-01-10 07:19:31.0 5
2017-01-10 07:19:32.0 2017-01-10 07:19:32.0 3
2017-01-10 07:19:33.1 2017-01-10 07:19:37.1 5
Setelah saya menyelesaikan langkah pertama ini, saya akan menambahkan lebih banyak kolom untuk digunakan sebagai aturan untuk memecah grup, dan yang lainnya akan menjadi nol.
Versi Postgres: 8.4 (Kami memiliki Postgres dengan Postgis, jadi tidak mudah untuk ditingkatkan. Fungsi Postgis mengubah nama dan ada masalah lain, tapi mudah-mudahan kami sudah menulis semuanya dan versi baru akan menggunakan versi yang lebih baru 9.X dengan postgis 2.x)