0
0
0
share
#database#database#sql#sql
0 Komentar
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.

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.

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.

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.

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.

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.
0
0
0
share