Window function di SQL Server: RANK, LAG, dan LEAD
Bandingkan baris dengan baris sebelum dan sesudahnya tanpa self join yang rumit.
Kebutuhan membandingkan antar baris
Laporan tren sering membutuhkan perbandingan nilai bulan ini dengan bulan sebelumnya. Tanpa window function, ini biasanya butuh self join yang memperlambat query dan mempersulit pembacaan.
LAG dan LEAD
SELECT
bulan,
total_penjualan,
LAG(total_penjualan) OVER (ORDER BY bulan) AS penjualan_bulan_lalu,
LEAD(total_penjualan) OVER (ORDER BY bulan) AS penjualan_bulan_depan
FROM ringkasan_bulanan;
LAG mengambil nilai dari baris sebelumnya berdasarkan urutan yang ditentukan, sedangkan LEAD mengambil nilai dari baris berikutnya. Baris pertama tidak punya nilai LAG, dan baris terakhir tidak punya nilai LEAD, sehingga hasilnya NULL.
Menghitung selisih pertumbuhan
SELECT
bulan,
total_penjualan,
total_penjualan - LAG(total_penjualan) OVER (ORDER BY bulan) AS selisih
FROM ringkasan_bulanan;
RANK dengan PARTITION BY
SELECT
wilayah,
nama_sales,
total_penjualan,
RANK() OVER (PARTITION BY wilayah ORDER BY total_penjualan DESC) AS peringkat
FROM performa_sales;
PARTITION BY wilayah membuat peringkat dihitung ulang mulai dari 1 untuk setiap wilayah, mirip konsep subtotal per grup.
Window function tidak mengubah jumlah baris
Berbeda dengan GROUP BY yang meringkas data menjadi lebih sedikit baris, window function tetap menampilkan seluruh baris asli sambil menambahkan kolom hasil perhitungan berbasis kelompok.
Latihan
Gunakan FIRST_VALUE untuk menampilkan nilai penjualan bulan pertama sebagai pembanding di setiap baris pada tabel yang sama.
