Mendapatkan N-PerGroup berdasarkan Range

Soeleman 30 Agustus 2017

Mendapatkan N-PerGroup berdasarkan Range

Mendapatkan data dengan variasi limit per-group-nya terlihat akan cukup rumit bentuk query-nya. Untung-nya database biasanya menyediakan fitur yang membantu menyederhanakan tugas ini.

Table

Di sini kita siapkan 2 table saja. Dan kita isi sesuai dengan kebutuhannya.

GsData

Dalam demo ini table ini akan bertindak sebagai sumber data. Kebetulan hanya 3 tanggal saja dengan variasi jumlah record-nya.

alt text

GsDataConfig

Table ini berisi data yang menentukan berapa banyak record per-tanggal-nya. Column yang di gunakan PerDay. Seperti pada tanggal 02-Sep-16 maka kita hanya ingin 2 record saja, terlepas di table GsData memiliki lebih dari 2.

alt text

Target

ResultSet yang di harapkan akan seperti gambar di bawah. Hasil per-tanggal akan sesuai dengan nilai yang berada di table lainnya. Boleh di bilang hasil per-group-nya akan seperti dynamic query, padahal kita bisa juga melakukannya tanpa itu.

alt text

Caranya mudah saja, yang kita perlukan adalah membuat per-group-nya memiliki urutan yang berbeda. Dari situ kita hanya perlu mem-filter sesuai dengan group-nya. Sederhana bukan? Untuk praktis-nya kita lihat implementasi-nya di database langsung.

MySQL

Karena MySQL tidak memiliki fitur ROW_NUMBER. Maka di sini kita simulasikan fitur itu dengan procedural lewat variable. Dan Partition-nya juga digunakan cara yang sama; lihat @row_group.

alt text

SQL Server

Untuk database yang sudah memiliki fitur ROW_NUMBER. Caranya lebih sederhana seperti di bawah. Yang perlu di lihat adalah penggunaan Partition dan Order By.

alt text

Penutup

Perlu di ingat, query di atas hanya simulasi dari yang ingin kita capai. Ada beberapa hal yang tidak di masukkan agar lebih sederhana. Fokus-nya adalah mendapatkan maksimum data per-hari sesuai dengan limit yang telah ditentukan.

Referensi

Perhatian! Code yang ditampilkan dalam tulisan ini merupakan ilustrasi dari yang ingin dipaparkan dan bukan production ready code. Sudah banyak kejadian karena asal meng-copy-and-paste tanpa mengerti code yang diambil itu ke dalam production. Selain itu perlu ada tambahan code dan test sebelum siap untuk digunakan secara utuh.