Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Агрегирующая фу-ия выбирающая n-ое значение  [new]
Guest_Anton
Guest
Здравствуйте! Понадобилась агрегирующая фу-ия выбирающая n-ое значение.
Агрегирующие фу-ии к сожалению не могут принимать параметры.
Кто нибудь сталкивался с аналогичной задачей ??

пример
select t.c1,agg_n(t.c2,5),agg_n(t.c3,2)
from table t 
group by t.c1
29 окт 08, 15:48    [6371539]     Ответить | Цитировать Сообщить модератору
 Re: Агрегирующая фу-ия выбирающая n-ое значение  [new]
Guest_Anton
Guest
Guest_Anton

пример
select t.c1,agg_n(t.c2,5),agg_n(t.c3,2)
from table t 
group by t.c1



во второй колонке должно быть каждое пятое значение в группе
в третьей каждое второ
29 окт 08, 15:55    [6371623]     Ответить | Цитировать Сообщить модератору
 Re: Агрегирующая фу-ия выбирающая n-ое значение  [new]
Apex
Member

Откуда: Made in USSR
Сообщений: 3909
С помщью decode развести не получится?
29 окт 08, 15:56    [6371641]     Ответить | Цитировать Сообщить модератору
 Re: Агрегирующая фу-ия выбирающая n-ое значение  [new]
Guest_Anton
Guest
Apex
С помщью decode развести не получится?

невижу как ее даже прикрутить тут.
29 окт 08, 15:58    [6371669]     Ответить | Цитировать Сообщить модератору
 Re: Агрегирующая фу-ия выбирающая n-ое значение  [new]
NIIIK
Member

Откуда: Россия, Ростовская область, г. Таганрог
Сообщений: 1295
Guest_Anton,

Используйте аналитические функции. Там вы сможите получить нужное по порядку (по нужному полю) значение. Агрегатку свою для оракл писать не обязательно.
И больше не райдуйте подобныйми вопросами в ветке МсСКЛ. Радуйтесь что всё ещё работаете с Ораклом ))
29 окт 08, 16:01    [6371701]     Ответить | Цитировать Сообщить модератору
 Re: Агрегирующая фу-ия выбирающая n-ое значение  [new]
NIIIK
Member

Откуда: Россия, Ростовская область, г. Таганрог
Сообщений: 1295
первая
Я вот с неё начал по-моему.
29 окт 08, 16:05    [6371728]     Ответить | Цитировать Сообщить модератору
 Re: Агрегирующая фу-ия выбирающая n-ое значение  [new]
fy
Guest
попробуйте row_number+case
29 окт 08, 16:05    [6371729]     Ответить | Цитировать Сообщить модератору
 Re: Агрегирующая фу-ия выбирающая n-ое значение  [new]
Guest_Anton
Guest
NIIIK
Guest_Anton,

Используйте аналитические функции. Там вы сможите получить нужное по порядку (по нужному полю) значение. Агрегатку свою для оракл писать не обязательно.
И больше не райдуйте подобныйми вопросами в ветке МсСКЛ. Радуйтесь что всё ещё работаете с Ораклом ))


Спасибо! ) я нечаянно туда залез. Вы не могли бы привести пример небольшой.
29 окт 08, 16:07    [6371747]     Ответить | Цитировать Сообщить модератору
 Re: Агрегирующая фу-ия выбирающая n-ое значение  [new]
Guest_Anton
Guest
fy
попробуйте row_number+case


я думаю не поможет потому что rownum это сквозная нумерация, а мне в каждой группе надо начинать с единички.
29 окт 08, 16:08    [6371763]     Ответить | Цитировать Сообщить модератору
 Re: Агрегирующая фу-ия выбирающая n-ое значение  [new]
Asmodeus
Member

Откуда: Минск
Сообщений: 543
over (partition by /*по вкусу*/)
29 окт 08, 16:10    [6371780]     Ответить | Цитировать Сообщить модератору
 Re: Агрегирующая фу-ия выбирающая n-ое значение  [new]
NIIIK
Member

Откуда: Россия, Ростовская область, г. Таганрог
Сообщений: 1295
Guest_Anton,

не могу, нет Оракла :(
даже запрос негде написать, а по памяти не помню... но там просто было.

Наверное и на форуме ответы есть
29 окт 08, 16:11    [6371788]     Ответить | Цитировать Сообщить модератору
 Re: Агрегирующая фу-ия выбирающая n-ое значение  [new]
Guest_Anton
Guest
NIIIK спасибо !) буду мучить аналитические фу-ии.
29 окт 08, 16:32    [6372018]     Ответить | Цитировать Сообщить модератору
 Re: Агрегирующая фу-ия выбирающая n-ое значение  [new]
fy
Guest
если я правильно понял =)
with t AS (
select level val, level*2 val_1, 1 gr from dual connect by level < 10 UNION ALL
select level*3/2 val, level*3 val_1, 2 gr from dual connect by level < 10 
)
--
select max(v1), max(v2) from
(select v1, v2, row_number()over(partition by case when v1 is not null then 'v1' when v2 is not null then 'v2' end 
order by coalesce(v1, v2))rn from
(select case when mod(rn,5) = 0 then val end v1, case when mod(rn,3) = 0 then val_1 end v2 from 
(select val, val_1, row_number()over(partition by gr order by gr) rn from t)t) where coalesce(v1,v2) is not null)
group by rn
29 окт 08, 16:54    [6372179]     Ответить | Цитировать Сообщить модератору
 Re: Агрегирующая фу-ия выбирающая n-ое значение  [new]
Guest_Anton
Guest
у меня вроде попроще получилось
правда у меня есть самописная агрегирующая функция которая берет первое не NULL значание AGGFIRST


 select
   t2.c1,
   AGGFIRST(decode(n,5,t.c2,null)),
   AGGFIRST(decode(n,2,t.c3,null)),
 from 
 (select 
       t.*,
       row_number() over (partition by t.c1 order by t.c4)  as n
  from t) t2
 group by   t2.c1

29 окт 08, 17:24    [6372415]     Ответить | Цитировать Сообщить модератору
 Re: Агрегирующая фу-ия выбирающая n-ое значение  [new]
NIIIK
Member

Откуда: Россия, Ростовская область, г. Таганрог
Сообщений: 1295
Я думаю если можно выбрать 1ую и последнюю, то и n-ю можно

faq
29 окт 08, 17:45    [6372606]     Ответить | Цитировать Сообщить модератору
 Re: Агрегирующая фу-ия выбирающая n-ое значение  [new]
monkey_mind
Member

Откуда:
Сообщений: 528
и откуда вы только такие берётесь, нешто так лень книжки почитать
29 окт 08, 17:48    [6372627]     Ответить | Цитировать Сообщить модератору
 Re: Агрегирующая фу-ия выбирающая n-ое значение  [new]
Elic
Member

Откуда:
Сообщений: 29980
Guest_Anton
   AGGFIRST(decode(n,5,t.c2,null)),
   min(decode(n, 5, t.c2)),
29 окт 08, 17:50    [6372634]     Ответить | Цитировать Сообщить модератору
 Re: Агрегирующая фу-ия выбирающая n-ое значение  [new]
Guest_Anton
Guest
monkey_mind
и откуда вы только такие берётесь, нешто так лень книжки почитать

не понял ? ) расшифруйте пожалуйста.
29 окт 08, 17:59    [6372711]     Ответить | Цитировать Сообщить модератору
 Re: Агрегирующая фу-ия выбирающая n-ое значение  [new]
Guest_Anton
Guest
Elic
Guest_Anton
   AGGFIRST(decode(n,5,t.c2,null)),
   min(decode(n, 5, t.c2)),


да можно заменить такой фу-ей )
но просто AGGFIRST уже написана
29 окт 08, 18:01    [6372724]     Ответить | Цитировать Сообщить модератору
 Re: Агрегирующая фу-ия выбирающая n-ое значение  [new]
Elic
Member

Откуда:
Сообщений: 29980
Guest_Anton
но просто AGGFIRST уже написана
Не в моих силах заставить пользоваться быстрой встроенной функцией
29 окт 08, 18:16    [6372802]     Ответить | Цитировать Сообщить модератору
 Re: Агрегирующая фу-ия выбирающая n-ое значение  [new]
Guest_Anton
Guest
Guest_Anton
Elic
Guest_Anton
   AGGFIRST(decode(n,5,t.c2,null)),
   min(decode(n, 5, t.c2)),


да можно заменить такой фу-ей )
но просто AGGFIRST уже написана


я конечно воспользуюсь более быстрым вариантом ))
29 окт 08, 20:38    [6373330]     Ответить | Цитировать Сообщить модератору
 Re: Агрегирующая фу-ия выбирающая n-ое значение  [new]
Vladimir Sitnikov
Member

Откуда: Moscow, NetCracker
Сообщений: 407
Elic
Guest_Anton
   AGGFIRST(decode(n,5,t.c2,null)),
   min(decode(n, 5, t.c2)),
where n=5
30 окт 08, 01:23    [6373744]     Ответить | Цитировать Сообщить модератору
 Re: Агрегирующая фу-ия выбирающая n-ое значение  [new]
Elic
Member

Откуда:
Сообщений: 29980
Vladimir Sitnikov
where n=5
А ты попробуй "вдёрнуть" выдернутое из контекста :)
30 окт 08, 08:17    [6373894]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить