Гость
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Нумерованный ранг / 3 сообщений из 3, страница 1 из 1
06.12.2019, 06:29
    #39898909
Никита А
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нумерованный ранг
Всем привет, помогите пожалуйста написать алгоритм, выдающий нумерацию как в "necessary result" столбце
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
WITH IDLE AS (
SELECT '1' AS ID, 'OTHER' AS idle, '1' AS "necessary result" FROM dual union all
SELECT '2',       'ППР',           '2'                       FROM dual union all
SELECT '3',       'OTHER',         '3'                       FROM dual union all
SELECT '4',       'ППР',           '4'                       FROM dual union all
SELECT '5',       'ППР',           '4'                       FROM dual union all
SELECT '6',       'OTHER',         '5'                       FROM dual union all
SELECT '7',       'ППР',           '6'                       FROM dual union all
SELECT '8',       'ППР',           '6'                       FROM dual union all
SELECT '9',       'ППР',           '6'                       FROM dual union all
SELECT '10',      'OTHER',         '7'                       FROM dual 
)
SELECT IDLE.*  FROM IDLE
...
Рейтинг: 0 / 0
11.12.2019, 12:03
    #39901134
Sah
Sah
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нумерованный ранг
Ну, что-то такое наваял:
Код: 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.
WITH IDLE AS (
SELECT '1' AS ID, 'OTHER' AS idle, '1' AS "necessary result" FROM dual UNION ALL
SELECT '2',       'ППР',           '2'                       FROM dual UNION ALL
SELECT '3',       'OTHER',         '3'                       FROM dual UNION ALL
SELECT '4',       'ППР',           '4'                       FROM dual UNION ALL
SELECT '5',       'ППР',           '4'                       FROM dual UNION ALL
SELECT '6',       'OTHER',         '5'                       FROM dual UNION ALL
SELECT '7',       'ППР',           '6'                       FROM dual UNION ALL
SELECT '8',       'ППР',           '6'                       FROM dual UNION ALL
SELECT '9',       'ППР',           '6'                       FROM dual UNION ALL
SELECT '10',      'OTHER',         '7'                       FROM dual 
)
, idle_rc AS (
SELECT IDLE.*  
, lag(idle, 1, NULL) OVER(ORDER BY TO_NUMBER(ID)) n_st
FROM IDLE
)
SELECT ir.*
, COUNT( CASE 
            WHEN n_st = idle THEN NULL
            ELSE 1
         END
) OVER(ORDER BY TO_NUMBER(ID) ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
FROM idle_rc ir
ORDER BY TO_NUMBER(ID)



А может кто-то через MODEL или MATCH_RECOGNIZE сможет сделать?
...
Рейтинг: 0 / 0
11.12.2019, 12:49
    #39901184
Никита А
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нумерованный ранг
Sah, спасибо!

Но мне уже ответили на stackoverflow
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
with idle as (
    select '1' as id, 'OTHER' as idle, '1' as necessary_result   from dual union all
    select '2',       'ППР',           '2'                       from dual union all
    select '3',       'OTHER',         '3'                       from dual union all
    select '4',       'ППР',           '4'                       from dual union all
    select '5',       'ППР',           '4'                       from dual union all
    select '6',       'OTHER',         '5'                       from dual union all
    select '7',       'ППР',           '6'                       from dual union all
    select '8',       'ППР',           '6'                       from dual union all
    select '9',       'ППР',           '6'                       from dual union all
    select '10',      'OTHER',         '7'                       from dual 
)
select q2.id, idle, necessary_result, to_char (sum (chng) over (order by num)) result
from (
    select q1.*, case when prev = idle then 0 else 1 end chng 
    from (
        select idle.*, to_number (id) num, lag (idle) over (order by to_number (id)) prev 
        from idle
    ) q1
) q2    
order by num; 
...
Рейтинг: 0 / 0
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Нумерованный ранг / 3 сообщений из 3, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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