SQLPytanie 09 z 14
LAG — zmiana sprzedaży względem poprzedniego okresu
Najpierw odpowiedz na głos lub w myślach, potem porównaj.
Odpowiedź
Funkcja okienkowa zachowuje poszczególne wiersze i pozwala porównać je z innymi w ustalonej kolejności.
SQL
-- monthly_sales(product_id, month date, revenue numeric)
-- Jeden wiersz na produkt i miesiąc
WITH comparison AS (
SELECT *, LAG(revenue) OVER (
PARTITION BY product_id ORDER BY month
) AS previous_revenue
FROM monthly_sales
)
SELECT product_id, month,
revenue - previous_revenue AS difference,
100.0 * (revenue - previous_revenue)
/ NULLIF(previous_revenue, 0) AS change_pct
FROM comparison;Pułapka: LAG oznacza poprzedni wiersz, nie automatycznie poprzedni miesiąc. Jeśli brakuje okresów, trzeba uzupełnić kalendarz. NULLIF chroni przed dzieleniem przez zero.
Jak poszło? Bądź szczery — „Jeszcze nie” dodaje pytanie do powtórki.