LAG / LEAD
LAG возвращает значение из предыдущей строки окна, LEAD — из следующей.
LAG(col [, offset [, default]]) OVER (ORDER BY col) LEAD(col [, offset [, default]]) OVER (ORDER BY col)
Объяснение
Пример
-- Изменение продаж по сравнению с предыдущим месяцем SELECT month, sales, LAG(sales) OVER (ORDER BY month) AS prev_sales, sales - LAG(sales) OVER (ORDER BY month) AS diff FROM monthly_sales;
Связанные термины
Анекдоты по теме
Собеседование: — Напишите запрос для нахождения второй по величине зарплаты. Кандидат пишет подзапрос. — А можно без подзапроса? Пишет DENSE_RANK(). — А одной строкой? Пишет ORDER BY salary DESC LIMIT 1 OFFSET 1. Интервьюер: — Молодец. Это был вопрос на знание разных подходов, а не на правильный ответ.
LEAD() смотрит вперёд. LAG() смотрит назад. Они никогда не встречаются в одной строке результата. Но в одном запросе — пожалуйста: SELECT LAG(price) OVER w, LEAD(price) OVER w FROM prices WINDOW w AS (ORDER BY date);
— Что такое оконная функция? — Это агрегат, который не схлопывает строки. — Как? — Представь, что GROUP BY считает итог для группы. Оконная функция считает итог, но оставляет каждую строку.