Bir önceki satıra bakmak
LAG(sutun, n, varsayilan) sıralı penceredeki n önceki satırın değerini, LEAD n sonrakini getirir (n varsayılanı 1).
WITH aylik AS (
SELECT strftime('%Y-%m', order_date) AS ay, COUNT(*) AS siparis
FROM orders
WHERE order_date >= '2024-01-01'
GROUP BY ay
)
SELECT ay, siparis,
LAG(siparis) OVER (ORDER BY ay) AS onceki_ay,
siparis - LAG(siparis) OVER (ORDER BY ay) AS degisim,
ROUND(100.0 * (siparis - LAG(siparis) OVER (ORDER BY ay)) / LAG(siparis) OVER (ORDER BY ay), 1) AS yuzde
FROM aylik;
Müşteri bazında: siparişler arası gün
SELECT customer_id, order_date,
LAG(order_date) OVER (PARTITION BY customer_id ORDER BY order_date) AS onceki,
julianday(order_date) - julianday(LAG(order_date) OVER (PARTITION BY customer_id ORDER BY order_date)) AS gun_farki
FROM orders
WHERE customer_id = 7;
WINDOW kısaltmasıAynı pencereyi tekrar tekrar yazmak yerine sorgunun sonunda isim verebilirsin:
... OVER w ... WINDOW w AS (ORDER BY ay).Derinleş: LAG ile değişim ve süre
LAG'ın en sık iki kullanımı: bir önceki döneme göre değişim ve iki olay arasındaki süre. İkincisinde PARTITION BY'ı unutma; yoksa bir kuryenin ilk teslimatı başka bir kuryenin son teslimatıyla karşılaştırılır.
SELECT courier_id, delivered_at,
LAG(delivered_at) OVER (PARTITION BY courier_id ORDER BY delivered_at) AS onceki
FROM lk_orders
WHERE status = 'teslim' AND courier_id = 1
ORDER BY delivered_at
LIMIT 5;Bölümün ilk satırında LAG NULL döner; üçüncü değişkenle varsayılan verilebilir: LAG(x, 1, 0).