Почему вы решили вынести ранжирование в отдельную CTE? Почему нельзя было использовать его сразу в первой CTE?

Отдельная CTE часто нужна, чтобы сначала вычислить оконный ранг, а затем отфильтровать его. В том же SELECT использовать результат окна в WHERE обычно нельзя.

Короткий ответ

Что ответить на собеседовании

Отдельная CTE часто нужна, чтобы сначала вычислить оконный ранг, а затем отфильтровать его. В том же SELECT использовать результат окна в WHERE обычно нельзя.

Подробный разбор

Ответ с пояснениями

Отдельная CTE часто нужна, чтобы сначала вычислить оконный ранг, а затем отфильтровать его. В том же SELECT использовать результат окна в WHERE обычно нельзя.

WHERE логически обрабатывается до оконных функций. Поэтому ROW_NUMBER() ... AS rn рассчитывают в подзапросе или CTE, а снаружи пишут WHERE rn = 1. Это не означает, что ранжирование нельзя добавить в первую CTE: всё зависит от того, какие данные она уже формирует. Некоторые СУБД поддерживают QUALIFY. Без исходного SQL конкретную необходимость дополнительного слоя определить нельзя.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее