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

🐛 Ошибки

📁 Блок: 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.

🐛 Типичные ошибки

Ошибка 1. В LAG/LEAD нет ORDER BY

Симптом: Запрос работает, но соседние даты не имеют смысла.

Исправление: Добавьте ORDER BY date_received.

Ошибка 2. DENSE_RANK фильтруют в WHERE того же SELECT

Симптом: SQL не видит псевдоним quantity_rank.

Исправление: Используйте CTE ranked_products.

Ошибка 3. FIRST_VALUE для максимума отсортирован по ASC

Симптом: Вместо максимума получается минимум.

Исправление: Для максимума используйте ORDER BY quantity DESC.

Ошибка 4. Не убраны NULL даты

Симптом: В начале окна появляются пустые даты и портят соседние значения.

Исправление: Фильтруйте WHERE date_received IS NOT NULL до расчёта окна.