CftClub.ru
Клуб специалистов ЦФТ-Банк

Аналитика в pl+

 
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Уроки ЦФТ-Банк для начинающих
Предыдущая тема :: Следующая тема  
Автор Сообщение
storysoft
Участник со стажем


Вступление в Клуб: 18.07.2014
СообщениеСр Июн 01, 2016 10:32   Аналитика в pl+ Ответить с цитатой
Полезность: Нет оценки
Добрый день коллеги. Подскажите как в pl+ перевести такую конструкцию:

DTIME-lag(DTIME) OVER(ORDER BY DTIME)

В pl+ ругается на первый аргумент, где выражение (Неправильный тип выражения).


Код:
analytic(ows1.[TRANS_DTIME]-lag(ows1.[TRANS_DTIME]), 'OVER(order by [1])',ows1.[TRANS_DTIME])
yaffil
Профи


Вступление в Клуб: 18.08.2011
СообщениеСр Июн 01, 2016 10:35    Ответить с цитатой
Полезность: Нет оценки
Групповые функции:
CORR
COVAR_POP
COVAR_SAMP
REGR_XXX (XXX=/SLOPE INTERCEPT COUNT R2 AVGX AVGY SXX SYY SYY/)
STDDEV_POP
STDDEV_SAMP
VAR_POP
VAR_SAMP
Аналитические функции:
LISTAGG
CUME_DIST
DENSE_RANK
PERCENT_RANK
RANK
FIRST_VALUE
LAST_VALUE
LAG
LEAD
NTILE
RATIO_TO_REPORT
ROW_NUMBER
PERCENTILE_CONT (Oracle9i)
PERCENTILE_DISC (Oracle9i)
Для вызова аналитических функций и групповых в режиме аналитических
добавлена специальная псевдо-функция ANALYTIC. Формат ее вызова:
ANALYTIC(group_func(params),template,expr1,expr2,...)
где
group_func - вызов групповой или аналитической функции из указанных выше,
params - собственный набор параметров функции group_func,
template - строковая константа, определяющая опции вызова аналитической
функции (over_clause, query_partition_clause, order_by_clause,
windowing clause,within_group_clause,keep_clause) в формате
Oracle SQL, содержащая place_holders для выражений, используемых
в этих опциях, в виде [<порядковый номер>]
expr1,expr2,... - выражения, которыми заменяются place_holders в шаблоне
опций аналитической функции (template). Причем выражение
expr1 заменяет все вхождения подстроки '[1]' в указанном
шаблоне, expr2 заменяет вхождения '[2]' и т.д.
storysoft
Участник со стажем


Вступление в Клуб: 18.07.2014
СообщениеСр Июн 01, 2016 10:42    Ответить с цитатой
Полезность: Нет оценки
group_func - вызов групповой или аналитической функции из указанных выше

Как быть если нужно подать выражение (DTIME-lag(DTIME)) в group_func?
В pl/sql DTIME-lag(DTIME) OVER(ORDER BY DTIME) компилируется без проблем.
Volod
Эксперт


Вступление в Клуб: 19.09.2007
СообщениеСр Июн 01, 2016 11:03    Ответить с цитатой
Полезность: Нет оценки
DTIME-analytic(lag([1]), 'OVER(ORDER BY [1])', DTIME)

А что такое DTIME? Колонка? А где алиас?
storysoft
Участник со стажем


Вступление в Клуб: 18.07.2014
СообщениеСр Июн 01, 2016 11:15    Ответить с цитатой
Полезность: Нет оценки
Код:

select ows1(
    analytic(ows1.[TRANS_DTIME]-lag(ows1.[TRANS_DTIME]), 'OVER(order by [1])',ows1.[TRANS_DTIME]) : ttt
)
in ::[OWS_TRANSACTION] all

Amper
Профи


Вступление в Клуб: 29.10.2010
СообщениеСр Июн 01, 2016 11:22    Ответить с цитатой
Полезность: Нет оценки
Так:
Код:
select ows1(
   ows1.[TRANS_DTIME] - analytic(lag(ows1.[TRANS_DTIME]), 'OVER(order by [1])',ows1.[TRANS_DTIME]) : ttt
)
in ::[OWS_TRANSACTION] all
storysoft
Участник со стажем


Вступление в Клуб: 18.07.2014
СообщениеСр Июн 01, 2016 12:47    Ответить с цитатой
Полезность: Нет оценки
Всем спасибо, скомпилировалось
storysoft
Участник со стажем


Вступление в Клуб: 18.07.2014
СообщениеЧт Июн 02, 2016 06:59    Ответить с цитатой
Полезность: Нет оценки
Подскажите еще вопрос как в PL+ использовать в условии where вычисляемые поля? Например в pl/sql такой запрос компилируются а в pl+ ошибка "нет реквизита или операции dt_prev"
Код:

select ows1(
               analytic(lag(ows1.[TRANS_DTIME]), 'OVER(order by [1])',ows1.[TRANS_DTIME]) : dt_prev
            )
         in ::[OWS_TRANSACTION] all
         where dt_prev - ows1.[TRANS_DTIME] <= mins
Эмиралька
Эксперт


Вступление в Клуб: 09.11.2015
СообщениеЧт Июн 02, 2016 08:25    Ответить с цитатой
Полезность: Нет оценки
storysoft пишет:
Подскажите еще вопрос как в PL+ использовать в условии where вычисляемые поля? Например в pl/sql такой запрос компилируются а в pl+ ошибка "нет реквизита или операции dt_prev"
Код:

select ows1(
               analytic(lag(ows1.[TRANS_DTIME]), 'OVER(order by [1])',ows1.[TRANS_DTIME]) : dt_prev
            )
         in ::[OWS_TRANSACTION] all
         where dt_prev - ows1.[TRANS_DTIME] <= mins


Что-то у меня сомнения.
Как в условии where можно обратиться к полям, которые определяются после того, как должно отработать where ?
А напиши SQL-запрос, который сработает?
Заинтересовало.
Volod
Эксперт


Вступление в Клуб: 19.09.2007
СообщениеЧт Июн 02, 2016 09:09    Ответить с цитатой
Полезность: Нет оценки
Код:
select  x(x.dt_prev :dt_prev) in (select ... :dt_prev......)
where x.dt_prev ....
storysoft
Участник со стажем


Вступление в Клуб: 18.07.2014
СообщениеЧт Июн 02, 2016 13:10    Ответить с цитатой
Полезность: Нет оценки
Прошу прощения погорячился, надо подзапрос делать
Эмиралька
Эксперт


Вступление в Клуб: 09.11.2015
СообщениеЧт Июн 02, 2016 13:34    Ответить с цитатой
Полезность: Нет оценки
storysoft пишет:
Прошу прощения погорячился, надо подзапрос делать


Нууу, так не интересно.
А вот зато в order by в SQL можно обращаться к полям запроса:
Код:
select c_main_v_id
, substr(c_main_v_id, 6, 3) c_iso
 from z#ac_fin
order by c_iso
Показать сообщения:   
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Уроки ЦФТ-Банк для начинающих Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Рейтинг@Mail.ru