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
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.
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.
Tunjukkan petunjuk
Gunakan LAG(harga) OVER(ORDER BY launch_on ASC)
Solusi tersedia setelah 3 upaya
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.
Tunjukkan petunjuk
LEAD() bersama dengan PARTITION BY dan ORDER BY di OVER.
Solusi tersedia setelah 3 upaya