powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Ранжирование группы одинаковых значений
6 сообщений из 6, страница 1 из 1
Ранжирование группы одинаковых значений
    #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
Ранжирование группы одинаковых значений
    #39629589
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vint44,

match_number()
...
Рейтинг: 0 / 0
Ранжирование группы одинаковых значений
    #39629597
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А в до-12-ых версиях STFF start_of_group
...
Рейтинг: 0 / 0
Ранжирование группы одинаковых значений
    #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
Ранжирование группы одинаковых значений
    #39629616
vint44
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо всем, помогли!
Stax-у в особенности, за конкретный пример! А то в случае с match_number() я бы долго еще возился, т.к. ни разу ее не юзал )
...
Рейтинг: 0 / 0
Ранжирование группы одинаковых значений
    #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
6 сообщений из 6, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Ранжирование группы одинаковых значений
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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