0
0
0
share
#database#database#sql#sql
0 Komentar
LAG dan LEAD Function di MySQL
MySQL tampaknya tertinggal banyak terutama dalam fitur. Seperti fitur analitik, yang di-SQL Server miliki. Dalam tulisan ini kita coba mengemulasi fungsi LAG dan LEAD itu dengan plain sql. Kita akan melihat bahwa fungsi ini akan banyak dipakai terutama untuk laporan dan perhitungan.
Table
Kita buat sebuah table EntryLog dengan data agar lebih mudah menjelaskannya.
LAG
Fungsi LAG ini berguna apabila kita ingin mendapatkan data yang ada di-row sebelum. Dan ini lebih terlihat sebagai Procedural daripada sql sendiri adalah menganut Declarative paradigma. Coba perhatikan resultset dibawah, hasil itu harus di proses per-row.
Dengan tidak adanya bantuan fungsi yang ada didalam databasenya, mau tidak mau kita harus mengemulasi fungsi itu. Dan cara mengabungkan dua resultset dan mengeser salah satu resultset-nya lebih rendah urutannya.
LEAD
Kebalikan fungsi LAG adalah LEAD. Ia akan mengambil data yang ada di-row sesudahnya. Ini memang terlihat tidak 'natural' untuk sql. Tapi data yang diperlukan seperti itu.
Caranya sama dengan LAG. Yang kita perlukan adalah mengeser urutan resultset lebih tinggi dari row di-resultset yang sekarang.
LAG + LEAD
Seperti yang diprediksi, biasa juga pengguna data akan meminta kombinasi dari itu.
Dengan cara yang kita gunakan, maka mudah sekali. Kita tinggal menggunakan tiga resultset. Satu resultset akan lebih rendah dan lebih tinggi dibandingkan dengan resultset utamanya.
Temp Table
Kalau kita perhatikan kita membuat resultset yang sama untuk digabungkan dalam rangka mengemulasi fungsi tersebut. Kita bisa saja membuat sebuah table sementara agar bisa digunakan untuk tujuan ini. Setidaknya kita membantu mengoptimalkan pengunaan database input-output (io).
Temp Memory
Apabila memiliki sumber daya yang besar, seperti ram besar. Kita bisa memanfaatkan itu sebagai penampungan data sementara dengan menggunakan temporary table.
Sayangnya temporary table di-MySQL tidak bisa self-join. Oleh karena itu kita mesti membuat tempat per-resultset.
View
Bisa juga kita memanfaatkan view sebagai cache resultset, apalagi kalau memang datanya tidak banyak bervariasi seperti pada contoh disini.
Menggunakannya juga tidak banyak berbeda dengan cara lainnya.
Penutup
Walaupun fitur itu tidak ada di-MYSQL, kita bisa membuatnya hanya dengan plain sql saja. Tentu penggunaan table sementara, temporary table atau view akan banyak membantu mengurangi beban query-engine.
Perlu diingat cara-cara diatas pada saat menggunakannya perlu juga pertimbangan atas situasi databasenya juga.
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