Я рефакторинг кода сотрудника, и у меня есть несколько случаев, когда он использует курсор, чтобы получить «последнюю строку, которая соответствует некоторый предикат»:Аналитические функции для «атрибута из строки с максимальной датой»
Его метод состоит в том, чтобы написать объединение как курсор, заказать его по дате, по убыванию, открыть курсор, получить первую строку и закрыть курсор.
Для этого требуется вызывать курсор для каждой строки набора результатов, который управляет этим, что дорого для многих строк. Я бы предпочел, чтобы иметь возможность присоединиться, но что-то дешевле, чем коррелированные подзапросы:
select a.id_shared_by_several_rows, a.foo from audit_trail a
where a.entry_date = (select max(a.entry_date)
from audit_trail b
where b.id_shared_by_several_rows = a.id_shared_by_several_rows
);
Я предполагаю, что, поскольку это общая потребность, есть аналитическая функция Oracle, что делает это?