Pelajaran 34 / 37 · Window function

LAG membaca nilai dari baris sebelumnya

Untuk setiap pelanggan, dengan urutan tanggal, lag() mengambil amount dari baris sebelumnya. Pesanan pertama setiap pelanggan tidak punya baris sebelumnya, jadi hasilnya NULL.

Query-nya

SELECT id, customer_id, order_date, amount,
       lag(amount) OVER (PARTITION BY customer_id ORDER BY order_date) AS previous_amount,
       amount - lag(amount) OVER (PARTITION BY customer_id ORDER BY order_date) AS change
FROM orders
WHERE amount IS NOT NULL
ORDER BY customer_id, order_date

Coba lead(amount): ia membaca baris berikutnya, jadi pesanan terakhir setiap pelanggan mendapat NULL.

Berikutnya: Membuat peringkat, lalu menyaringnya dengan QUALIFY · Semua pelajaran