Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Ранжирование группы одинаковых значений / 6 сообщений из 6, страница 1 из 1
13.04.2018, 07:55
    #39629587
vint44
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ранжирование группы одинаковых значений
Добрый день,

Помогите проранжировать следующую группу строк:
STR RN rnk(?)
AAA 1 1
AAA 2 1
AAA 3 1
BBB 4 2
BBB 5 2
AAA 6 3
AAA 7 3

Здесь поля STR, RN даны, а rnk надо вычислить.
RN задает порядок сортировки для STR, поэтому для одного и того же AAA будут присвоены два ранка 1,3, т.к. между ними есть группа из BBB.
Для применения напрашивается функция rank, но у меня не получается ее применить с учетом поля RN
...
Рейтинг: 0 / 0
13.04.2018, 08:12
    #39629589
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ранжирование группы одинаковых значений
vint44,

match_number()
...
Рейтинг: 0 / 0
13.04.2018, 08:37
    #39629597
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ранжирование группы одинаковых значений
А в до-12-ых версиях STFF start_of_group
...
Рейтинг: 0 / 0
13.04.2018, 08:41
    #39629600
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ранжирование группы одинаковых значений
vint44,

Код: 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.
  1  with t (a,rn) as (
  2  select 'AAA', 1 from dual union all
  3  select 'AAA', 2 from dual union all
  4  select 'AAA', 3 from dual union all
  5  select 'BBB', 4 from dual union all
  6  select 'BBB', 5 from dual union all
  7  select 'AAA', 6 from dual union all
  8  select 'AAA', 7 from dual )
  9  ,tt as (
 10  select t.*
 11  ,decode(lag(a) over (order by rn),a,0,1) f
 12  from t)
 13  select
 14    a,rn
 15   ,sum(f) over (order by rn) gr
 16* from tt
SQL> /

A           RN         GR
--- ---------- ----------
AAA          1          1
AAA          2          1
AAA          3          1
BBB          4          2
BBB          5          2
AAA          6          3
AAA          7          3

7 rows selected.



.....
stax
...
Рейтинг: 0 / 0
13.04.2018, 09:09
    #39629616
vint44
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ранжирование группы одинаковых значений
Спасибо всем, помогли!
Stax-у в особенности, за конкретный пример! А то в случае с match_number() я бы долго еще возился, т.к. ни разу ее не юзал )
...
Рейтинг: 0 / 0
13.04.2018, 13:46
    #39629843
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ранжирование группы одинаковых значений
-2-match_number()
пример с match_number():
Код: 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.
with t (a,rn) as (
   select 'AAA', 1 from dual union all
   select 'AAA', 2 from dual union all
   select 'AAA', 3 from dual union all
   select 'BBB', 4 from dual union all
   select 'BBB', 5 from dual union all
   select 'AAA', 6 from dual union all
   select 'AAA', 7 from dual 
)
select rn, a, classifier, match_number
from t
match_recognize(
     order by RN
     measures
        CLASSIFIER() AS CLASSIFIER,
        MATCH_NUMBER() AS MATCH_NUMBER
     all rows per match
     pattern (strt next*)
         define next as next.a = prev(a)
)
/
        RN A   CLASSIFIER MATCH_NUMBER
---------- --- ---------- ------------
         1 AAA STRT                  1
         2 AAA NEXT                  1
         3 AAA NEXT                  1
         4 BBB STRT                  2
         5 BBB NEXT                  2
         6 AAA STRT                  3
         7 AAA NEXT                  3
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Ранжирование группы одинаковых значений / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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