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