Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Помогите с запросом  [new]
mnick
Member

Откуда: Москва
Сообщений: 396
Есть таблица вида:
ONDATE, CUSTOMER_ID, AMOUNT - дата, клиент, сумма
Надо по всем клиентам вывести все записи начиная с той у которой AMOUNT больше 1000
Есть:
01.01.2006 1 10
01.01.2006 1 50
02.01.2006 1 1100
03.01.2006 1 90
05.01.2006 1 6000
Результат:
02.01.2006 1 1100
03.01.2006 1 90
05.01.2006 1 6000
Хорошо бы с помощью аналитических функций...
18 май 06, 18:01    [2680711]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Nagel
Member

Откуда:
Сообщений: 118
дополнил данные:
6 2 10
7 3 1100
запрос:
select * from (
select t.*,
max(bb) over 
(partition by id order by id rows unbounded preceding) aa
from (
select t.*, case when am>1000 then 1 else 0 end bb
from tmp_test t
) t
) where aa=1
результат

         D         ID         AM         BB         AA
---------- ---------- ---------- ---------- ----------
2 1 1100 1 1
3 1 90 0 1
5 1 6000 1 1
7 3 1100 1 1

возможны ошибки.
18 май 06, 18:42    [2680919]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116169
Не знаю, почему то без аналитики получилось.

 select tt.ondate , tt.customer_id, tt.amount from test tt, 
 (select customer_id, min(ondate) min_date
 from test
 where amount > 1000
 group by customer_id) t
 where t.customer_id = tt.customer_id
 and ondate >= min_date
order by 2,1
 

Хотя возможно, с аналитикой как то элегантней можно, но чего то она не прикрутилась.
18 май 06, 18:42    [2680920]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
mnick
Member

Откуда: Москва
Сообщений: 396
А может кто скажет? Или даст ссылку где почитать?
Что лучше в плане производительности аналитические функции или вложенные подзапросы? Делает ли Oracle какую-нибудь дополнительную оптимизацию при использовании аналитических функций или нет?
У меня этот запрос должен работать с таблицей в которой несколько миллинов записей. Из-за этого и такие вопросы.
18 май 06, 18:49    [2680957]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Nagel
Member

Откуда:
Сообщений: 118
mnick
А может кто скажет?

А проверить ? На этот вопрос довольно сложно ответить однозначно.
Да, там бы еще в ордер бай дату добавить
18 май 06, 18:59    [2681017]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116169
mnick
А может кто скажет? Или даст ссылку где почитать?
Что лучше в плане производительности аналитические функции или вложенные подзапросы? Делает ли Oracle какую-нибудь дополнительную оптимизацию при использовании аналитических функций или нет?
У меня этот запрос должен работать с таблицей в которой несколько миллинов записей. Из-за этого и такие вопросы.


Протестируйте, может даже стоит посмотреть в сторону pipelined - функции.

Пример использования у SY
здесь.
18 май 06, 19:05    [2681053]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Nagel
Member

Откуда:
Сообщений: 118
автор
Протестируйте, может даже стоит посмотреть в сторону pipelined - функции

для
автор
таблицей в которой несколько миллинов записей

???
Вы уверены ???
ИМХО не разумно.
Может лучше тогда че-то с индексами замутить ?
18 май 06, 19:09    [2681070]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116169
Nagel
автор
Протестируйте, может даже стоит посмотреть в сторону pipelined - функции

для
автор
таблицей в которой несколько миллинов записей

???
Вы уверены ???
ИМХО не разумно.
Может лучше тогда че-то с индексами замутить ?


Нет, не уверен, но при неудовлетворительных результатах других запросов рассмотрел бы как альтернативу и протестировал бы...
18 май 06, 19:18    [2681119]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить