powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как оптимальнее выбирать MAX(date)
6 сообщений из 6, страница 1 из 1
Как оптимальнее выбирать MAX(date)
    #32151277
Dick Gonsales
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть ли большая разница в реализации задачи
при таких условиях

Необходимо выбрать по товару <сумму> с MAX(<дата>)
Есть таблица
<код товара>, <дата>, <сумма>

Выборка происходит внутри процедуры
1. Вариант
SELECT <код товара>, <дата>, <сумма>
FROM <таблица>
WHERE <код товара> = 12
ORDER BY <дата> DESC

И в курсоре выбирать первую запись.
Запрос шуршит по индексу COST небольшой,
количество записей которые выбираются вряд ли будет
превышать когда либо 50.

2. Вариант
SELECT <код товара>, MAX(TO_CHAR(<дата>,'yyyy-dd-mm')||' '|| <сумма>)
FROM <таблица>
WHERE <код товара> = 12
GROUP BY <код товара>

COST тоже небольшой, индексы подхвачены
...
Рейтинг: 0 / 0
Как оптимальнее выбирать MAX(date)
    #32151292
Jinn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я, обычно, выбирал таким способом:

select <Код>,<Дата>,<Сумма>,
from <Таблица> A
where A.<Дата>=(select MAX(B.<Дата>)
from <Таблица> B
where A.<Код>=B.<Код>)

Результат всегда был отличный.
...
Рейтинг: 0 / 0
Как оптимальнее выбирать MAX(date)
    #32151358
Dick Gonsales
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как ты думаешь что быстрее,

select f1, MAX(f2) from tbl1
или

select f1, f2
from tbl1 A
where A.f2=(select MAX(B.f2) from tbl2 B
where A.f1=B.f2)

И насколько по плану будет различие?
...
Рейтинг: 0 / 0
Как оптимальнее выбирать MAX(date)
    #32151386
fly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
fly
Гость
создать индекс по полю <дата>,
в запрос включить хинт - по этому индексу с desc
а раз нужна только строка с максимальной датой - добавить в условия - rownum<2

что то вроде
SELECT /*+ INDEX_DESC ()*/ <код товара>, <дата>, <сумма>
INTO V_<код товара>, :V_<дата>, V_<сумма>
FROM <таблица>
WHERE <код товара> = 12 AND
ROWNUM<2;

работает быстро
...
Рейтинг: 0 / 0
Как оптимальнее выбирать MAX(date)
    #32151533
Dick Gonsales
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
To fly С индексом интересная идея...
...
Рейтинг: 0 / 0
Как оптимальнее выбирать MAX(date)
    #32152020
Jinn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Dick Gonsales
Немного неправильная постановка вопроса :)
1. В запросе используется только одна таблица <Таблица>.
2. В приведенном тобой примере не указана группировк (Oracle ругается ;)).
3. При использовании group by если в таблице содержится значительное количество строк - тормоза неминуемы.
4. В случае с выборкой одной записи (where <Код>=NN) - твой вариант предпочтительней.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как оптимальнее выбирать MAX(date)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]