Hari 28: Window Functions — LAG, LEAD & SUM Kumulatif
60 min
Last updated 25 Mar 2026
LAG & LEAD — Akses Baris Sebelumnya/Berikutnya
-- LAG: ambil nilai dari baris sebelumnya
-- LEAD: ambil nilai dari baris berikutnya
-- Tren pesanan: bandingkan total_harga dengan pesanan sebelumnya per pelanggan
SELECT
pelanggan_id,
tanggal_pesan,
total_harga,
LAG(total_harga) OVER (PARTITION BY pelanggan_id ORDER BY tanggal_pesan) AS pesanan_sebelumnya,
total_harga - LAG(total_harga) OVER (PARTITION BY pelanggan_id ORDER BY tanggal_pesan) AS selisih
FROM pesanan
ORDER BY pelanggan_id, tanggal_pesan;
SUM Kumulatif (Running Total)
-- Akumulasi pendapatan dari pesanan selesai
SELECT
id,
tanggal_pesan,
total_harga,
SUM(total_harga) OVER (ORDER BY tanggal_pesan) AS pendapatan_kumulatif
FROM pesanan
WHERE status_pesanan = 'selesai'
ORDER BY tanggal_pesan;
NTILE — Bagi ke N Kelompok
-- Bagi pelanggan ke 4 kuartil berdasarkan umur
SELECT nama, umur,
NTILE(4) OVER (ORDER BY umur) AS kuartil_umur
FROM pelanggan ORDER BY umur;
💡
Notice: SUM() OVER (ORDER BY col) otomatis menjadi running total karena framing default-nya adalah ROWS UNBOUNDED PRECEDING.
Assignment
Hitung running total (pendapatan kumulatif) dari semua pesanan yang sudah selesai, diurutkan dari tanggal terlama. Tampilkan: id, tanggal_pesan, total_harga, pendapatan_kumulatif.
Expected output:
14 row(s) returned
SQL
query.sql
Solution
Output
⏳ Loading DB...