Lompati ke konten utama
Modul 13 · Pelajaran 4 dari 452/57 dalam kursus~12 min
Pelajaran modul (4/4)

Pergeseran: LAG dan LEAD

Pergeseran: LAG dan LEAD

Dalam data berurutan dan berdasarkan waktu, Anda sering kali perlu membandingkan baris saat ini dengan baris hari sebelumnya. Dalam SQL "standar", hal itu memerlukan penggabungan mandiri yang sangat berbahaya (dan sangat lambat).

Fungsi LAG() (baris sebelumnya) dan LEAD() (baris berikutnya) memecahkan masalah ini dengan kelincahan dan keanggunan yang ekstrem.

Melihat ke Masa Lalu dan Masa Depan

SQL
SELECT
  created_at,
  total_amount,
  LAG(total_amount) OVER(ORDER BY created_at) AS importo_ordine_precedente
FROM orders;

Dalam contoh ini, setiap baris akan dengan mudah membawa jumlah yang dihasilkan oleh tabel yang sama, digeser ke depan sebanyak satu baris (mundur dalam waktu). Kita dapat dengan mudah mengurangi total_amount - LAG(...) untuk menghitung selisih atau perubahan persentase dari bulan ke bulan!

Demikian pula, LEAD() akan mengambil nilai dari baris tepat di bawah nilai saat ini.

Latihan#sql.m13.l4.e1
Upaya: 0Memuat…

Dari tabel 'produk', ekstrak 'id', 'launched_on', 'price' dan tambahkan 'prev_price', yaitu 'harga' produk secara logis dianggap sebagai harga 'sebelumnya', dalam urutan 'launched_on' menaik.

Memuat editor…
Tunjukkan petunjuk

Gunakan LAG(harga) OVER(ORDER BY launch_on ASC)

Solusi tersedia setelah 3 upaya

Latihan#sql.m13.l4.e2
Upaya: 0Memuat…

Bagaimana Anda menghitung lonjakan peringkat per pengguna? Simulasikan: dari tabel 'reviews' ekstrak 'customer_id', 'created_at', 'rating' dan 'next_rating' (review berikutnya dari pelanggan yang sama dari waktu ke waktu). Jadi partisi berdasarkan 'customer_id', pesan berdasarkan 'created_at' dan gunakan fungsi jendela kanan untuk mengintip ke depan.

Memuat editor…
Tunjukkan petunjuk

LEAD() bersama dengan PARTITION BY dan ORDER BY di OVER.

Solusi tersedia setelah 3 upaya