ROW_NUMBER()
- аналитическая функция, в этом случае функция, возвращающая отдельное число для каждой строки.Предложение PARTITION управляет окном, в котором генерируется номер строки, а ORDER BY определяет сортировку строк в этом разделе.
Итак, как вы заметили, внутренний запрос производит число для каждой строки, сбрасывая это число для начала каждого прогона записей для данного идентификатора и сортируя их в обратном порядке дат.Это означает, что самая последняя запись для каждого идентификатора имеет номер строки 1. Внешний запрос фильтрует псевдоним этой функции, RN
, чтобы создать результирующий набор, содержащий только самые последние записи для всех идентификаторов.
Аналитические функции отличаются от агрегатных функций (т. Е. GROUP BY
) тем, что мы можем использовать их без необходимости разбивать все столбцы в проекции.Это делает их полезными в запросах, когда мы хотим вернуть другие столбцы.
Документация Oracle является всеобъемлющей, онлайн и бесплатной.Вы должны научиться ориентироваться в нем. Узнайте больше об аналитических функциях здесь .