Ruang penulis
← Kembali ke jurnal
MSSQL

Window function di SQL Server: RANK, LAG, dan LEAD

Bandingkan baris dengan baris sebelum dan sesudahnya tanpa self join yang rumit.

DTim Diary Coding · 23 Agt 2026 · 2 menit baca

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.

← Jelajahi catatan lainnya