← К оглавлению занятия

📝 Задания

📁 Блок: SQL / MySQL / Оконные функции ⏱️ Время изучения: ~90 мин 🎯 Сложность: Продвинутая

⚡ Кратко: задания

Функции смещения и выбора позволяют смотреть не только на текущую строку, но и на соседние или крайние строки внутри окна.

LAG() возвращает значение из предыдущей строки, а LEAD() — из следующей строки в порядке, заданном внутри OVER.

FIRST_VALUE(), LAST_VALUE() и NTH_VALUE() выбирают первое, последнее или n-е значение в окне.

Ключевая конструкция урока: function(column) OVER (PARTITION BY group_column ORDER BY sort_column).

Минимальный пример: LAG(creation_date) OVER (PARTITION BY supplier_id ORDER BY creation_date) показывает предыдущую дату заказа поставщика.

Топ-3 ошибки: забыть ORDER BY, перепутать направление LEAD/LAG, использовать LAST_VALUE без явной рамки окна.

📝 Практические задания

1

Предыдущая дата заказа

Из таблицы purchase_orders для каждого supplier_id выведите creation_date, предыдущую дату создания заказа и разницу между датами.

2

Среднее время между заказами

Измените предыдущий запрос так, чтобы получить одно значение: среднее количество дней между двумя заказами.

3

Тот же расчёт через LEAD

Напишите аналогичный запрос с LEAD и сравните результат с вариантом на LAG.

4

Самая ранняя submitted_date

Для каждого менеджера created_by найдите самую раннюю submitted_date через MIN и через FIRST_VALUE.

Проверка понимания

Выберите один вариант ответа. После клика правильный ответ подсветится зелёным.

Вопрос 1

Что возвращает LAG?

Вопрос 2

Что обязательно задаёт смысл «предыдущей» строки?

Вопрос 3

Когда нужен PARTITION BY?

Вопрос 4

Что делает LEAD?

Вопрос 5

Почему FIRST_VALUE может заменить MIN в задании 4?

Вопрос 6

Почему LAST_VALUE часто требует явной рамки окна?

Вопрос 7

Где фильтровать результат оконной функции?