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

🏠 Домашнее задание

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

⚡ Кратко: домашка

Практикум 10 закрепляет оконные функции ранжирования, смещения и выбора на таблице purchase_order_details.

Ключевые конструкции: LAG, LEAD, FIRST_VALUE, DENSE_RANK, ROW_NUMBER, CTE.

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

Практический фокус — сначала получить аналитический столбец, а затем фильтровать результат через CTE или подзапрос.

Топ-3 ошибки: не задать сортировку для LAG/LEAD, фильтровать ROW_NUMBER в том же WHERE, забыть убрать строки с пустым date_received.

🏠 Домашнее задание

В источнике к практикуму 10 отдельное домашнее задание не задано. После занятия стоит завершить нерешённые задачи практикума и сверить запросы с решениями.

  1. Переписать каждое решение так, чтобы имена вычисляемых столбцов были понятными.
  2. Для задач 5 и 6 объяснить, почему нужен внешний запрос или CTE.
  3. Проверить, как меняется результат первого задания при добавлении ORDER BY date_received DESC.

Пошаговое решение и проверка

Самопроверка

-- Проверьте, что каждый запрос:
-- 1. явно задаёт ORDER BY внутри OVER;
-- 2. использует PARTITION BY там, где расчёт идёт внутри группы;
-- 3. фильтрует ранги и номера строк во внешнем SELECT.

Это не новая задача из LMS, а чек-лист закрепления практикума.