Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Какая аналитическая функция ? / 7 сообщений из 7, страница 1 из 1
28.03.2017, 12:40
    #39428333
Коноплио
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какая аналитическая функция ?
Коллеги, подскажите, есть упорядоченный набор
Нужно найти колонку 3, это последовательные нруппы с S встречающиеся в последовательности.
1 A 0
2 S 1
3 S 1
4 A 0
5 S 2
6 S 2
7 A 0
8 S 3

Подскажите аналитич. функцию.
...
Рейтинг: 0 / 0
28.03.2017, 12:44
    #39428339
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какая аналитическая функция ?
STFF start_of_group
...
Рейтинг: 0 / 0
28.03.2017, 12:51
    #39428349
--Eugene--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какая аналитическая функция ?
Коноплио,

FIRST
...
Рейтинг: 0 / 0
28.03.2017, 13:06
    #39428370
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какая аналитическая функция ?
магия
Код: plsql
1.
sum(case c2 when 'A' then 1 end)

...
Рейтинг: 0 / 0
28.03.2017, 20:57
    #39428769
stax..
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какая аналитическая функция ?
Коноплио,
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
  1  with t(srt,val,g) as (
  2  select 1, 'A', 0 from dual union all
  3  select 2, 'S', 1 from dual union all
  4  select 3, 'S', 1 from dual union all
  5  select 4, 'A', 0 from dual union all
  6  select 5, 'S', 2 from dual union all
  7  select 6, 'S', 2 from dual union all
  8  select 7, 'A', 0 from dual union all
  9  select 8, 'S', 3 from dual
 10  )
 11  ,tt as (
 12  select
 13   t.*
 14  ,case when lag(val,1,'a') over (order by srt) <> 'S' and val='S' then 1 else 0 end f
 15  from t
 16  )
 17* select srt,val,decode(val,'S',sum(f) over (order by srt),0) g from tt
SQL> /

       SRT V          G
---------- - ----------
         1 A          0
         2 S          1
         3 S          1
         4 A          0
         5 S          2
         6 S          2
         7 A          0
         8 S          3

8 rows selected.



+ возможно и model/math_recognize

......
stax
...
Рейтинг: 0 / 0
28.03.2017, 21:39
    #39428788
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какая аналитическая функция ?
stax..+ возможно и model/math_recognize


Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
with t(srt,val) as (
  select 1, 'A' from dual union all
  select 2, 'S' from dual union all
  select 3, 'S' from dual union all
  select 4, 'A' from dual union all
  select 5, 'S' from dual union all
  select 6, 'S' from dual union all
  select 7, 'A' from dual union all
  select 8, 'S' from dual
 )
select  srt,
        val,
        case val when 'S' then g else 0 end g
  from  t
  match_recognize(
                  order by srt
                  measures
                    match_number() g
                    all rows per match
                    pattern(strt s+)
                    define
                      s as val = 'S'
                 )
/
       SRT V          G
---------- - ----------
         1 A          0
         2 S          1
         3 S          1
         4 A          0
         5 S          2
         6 S          2
         7 A          0
         8 S          3

8 rows selected.

with t(srt,val) as (
  select 1, 'A' from dual union all
  select 2, 'S' from dual union all
  select 3, 'S' from dual union all
  select 4, 'A' from dual union all
  select 5, 'S' from dual union all
  select 6, 'S' from dual union all
  select 7, 'A' from dual union all
  select 8, 'S' from dual
 )
select  srt,
        val,
        case val when 'S' then g else 0 end g
  from  t
  model
    dimension by(srt)
    measures(val,0 g)
    rules(
          g[any] order by srt = case
                                  when val[cv()] = 'S' and nvl(val[cv() - 1],'X') != 'S' then  nvl(g[cv() - 1],0) + 1
                                  else nvl(g[cv() - 1],0)
                                end
         )
/
 

       SRT V          G
---------- - ----------
         1 A          0
         2 S          1
         3 S          1
         4 A          0
         5 S          2
         6 S          2
         7 A          0
         8 S          3

8 rows selected.



SY.
...
Рейтинг: 0 / 0
29.03.2017, 10:40
    #39429004
stax..
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какая аналитическая функция ?
SY,

без case val when 'S' then g else 0 end g
сильно правила усложнятся?

.....
stax
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Какая аналитическая функция ? / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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