KEEP (DENSE_RANK ...) Вместо подзапросов для поиска последнего или первого значения по группе можно использовать аналитическую агрегацию с
KEEP (DENSE_RANK ...). Это делает код короче и часто быстрее.📍 Пример: для каждой акции получить последнюю цену
select symbol,
max(price) keep (dense_rank last order by ts) as last_price,
max(ts) as last_ts
from trades
group by symbol;
📍 Первый тик за день:
select trunc(ts) as trade_day,
symbol,
min(price) keep (dense_rank first order by ts) as first_price
from trades
group by trunc(ts), symbol;
⚡ Плюсы:
- Нет лишних джоинов и подзапросов
- Работает прямо в GROUP BY
- Удобно для задач «последнее значение по группе»