WITH
Сохранить промежуточный набор строк.
WITH cte_name AS (...) SELECT ... FROM cte_name
Используется во втором задании для уникальных пар заказа и даты.
Практикум 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.
Команды и функции ниже взяты из темы урока и оформлены как быстрый справочник.
WITHСохранить промежуточный набор строк.
WITH cte_name AS (...) SELECT ... FROM cte_name
Используется во втором задании для уникальных пар заказа и даты.
LAGПолучить предыдущую дату получения продукта.
LAG(date_received) OVER (PARTITION BY product_id ORDER BY date_received)
Без сортировки предыдущая дата не определена.
LEADПолучить следующую дату получения продукта.
LEAD(date_received) OVER (PARTITION BY product_id ORDER BY date_received)
Удобно показать соседние даты в одной строке.
FIRST_VALUEВзять максимум или минимум через первое значение отсортированного окна.
FIRST_VALUE(quantity) OVER (PARTITION BY inventory_id ORDER BY quantity DESC)
Для минимума меняйте сортировку на ASC.
DENSE_RANKВыбрать топ продуктов без пропусков в рангах.
DENSE_RANK() OVER (ORDER BY quantity DESC)
Если несколько строк делят одно количество, они получат один ранг.
ROW_NUMBERПронумеровать строки и выбрать конкретную позицию.
ROW_NUMBER() OVER (ORDER BY inventory_id DESC)
Для 13-й строки фильтруйте WHERE row_num = 13 во внешнем запросе.
Полный справочник курса: SQL Reference. Документация по MongoDB в этом уроке не используется.