Menu
Coddy logo textTech

Функции LEAD и LAG

Часть раздела Основы путешествия по SQL на Coddy — урок 61 из 72.

Функции LEAD и LAG позволяют нам обращаться к значению текущей строки на n шагов назад или на n шагов вперед.

Например, если мы хотим вычислить соотношение выручки компании для текущей строки и одного месяца назад, мы можем извлечь значение из предыдущего месяца:

idrevenuemonth
15325
24926
33937
47238
SELECT id, revenue, LAG(revenue, 1) OVER (ORDER BY MONTH) as prev_month_revenue
FROM table1 ORDER BY id

Это создаст следующую таблицу:

idrevenueprev_month_revenue
1532 
2492532
3393492
4723393

Таким образом, мы можем вычислить отношение prev_month_revenue/revenue.

Если мы вместо этого использовали функцию LEAD, она бы взяла выручку следующего месяца для каждой строки:

SELECT id, revenue, LEAD(revenue, 1) OVER (ORDER BY MONTH) as next_month_revenue
FROM table1 ORDER BY id
idrevenuenext_month_revenue
1532492
2492393
3393723
4723 
challenge icon

Задание

Легко

Доступные таблицы и столбцы:

  • <strong>air_conditioners</strong>: <strong>id</strong>, <strong>efficiency</strong>, <strong>strength</strong>, <strong>month</strong>

Сравните эффективность каждого кондиционера воздуха с предыдущим.

Напишите запрос, который показывает эффективность каждого кондиционера воздуха вместе с эффективностью предыдущего установленного кондиционера (на основе id). Также вычислите разницу в эффективности между текущим и предыдущим кондиционером. Отсортируйте результат по <strong>id</strong> и <strong>efficiency</strong> в порядке возрастания.

Ожидаемые столбцы вывода:

  • id
  • efficiency
  • previous_efficiency (используя LAG)
  • efficiency_difference (текущая эффективность - предыдущая эффективность)

Наконец, после этого запроса отфильтруйте строки, где previous_efficiency пустая или efficiency_difference пустая, следующим образом:

SELECT * FROM (
    -- Your query here
)
WHERE previous_efficiency != 0

Шпаргалка

Функции LAG и LEAD позволяют получать доступ к значениям из предыдущих или следующих строк:

Функция LAG — получает значение из предыдущей строки:

LAG(column_name, n) OVER (ORDER BY column)

Функция LEAD — получает значение из следующей строки:

LEAD(column_name, n) OVER (ORDER BY column)

Пример использования LAG для получения выручки предыдущего месяца:

SELECT id, revenue, LAG(revenue, 1) OVER (ORDER BY month) as prev_month_revenue
FROM table1 ORDER BY id

Пример использования LEAD для получения выручки следующего месяца:

SELECT id, revenue, LEAD(revenue, 1) OVER (ORDER BY MONTH) as next_month_revenue
FROM table1 ORDER BY id

В первой строке значение LAG будет NULL, а в последней строке значение LEAD будет NULL.

Попробуйте сами

quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Основы