Ada dua alasan mengapa row y
tidak dikembalikan karena kondisi:
b.start > a.start
artinya suatu baris tidak akan pernah bergabung dengan dirinya sendiri- GROUP BY hanya akan mengembalikan satu record per
APP_nm
nilai, namun semua baris memiliki nilai yang sama.
Namun, ada kesalahan logika lebih lanjut dalam kueri yang tidak akan berhasil ditangani. Misalnya, bagaimana cara mengetahui kapan sesi "baru" dimulai?
Logika yang Anda cari dapat dicapai dalam PostgreSQL normal dengan bantuan DISTINCT ON
fungsi, yang menunjukkan satu baris per nilai input dalam kolom tertentu. Namun, DISTINCT ON
tidak didukung oleh Redshift.
Beberapa solusi potensial:DISTINCT ON seperti fungsionalitas untuk Redshift
Output yang Anda cari akan sepele menggunakan bahasa pemrograman (yang dapat mengulang hasil dan menyimpan variabel) tetapi sulit untuk diterapkan pada kueri SQL (yang dirancang untuk beroperasi pada deretan hasil). Saya akan merekomendasikan mengekstraksi data dan menjalankannya melalui skrip sederhana (misalnya dengan Python) yang kemudian dapat menampilkan kombinasi Awal &Akhir yang Anda cari.
Ini adalah kasus penggunaan yang sangat baik untuk Fungsi Hadoop Streaming , yang telah berhasil saya terapkan di masa lalu. Ini akan mengambil catatan sebagai input, lalu 'mengingat' waktu mulai dan hanya akan mengeluarkan catatan ketika logika akhir yang diinginkan telah terpenuhi.