powered by simpleCommunicator - 2.0.44     © 2025 Programmizd 02
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Нумерованный ранг
3 сообщений из 3, страница 1 из 1
Нумерованный ранг
    #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
Нумерованный ранг
    #39901134
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
Нумерованный ранг
    #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
3 сообщений из 3, страница 1 из 1
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Нумерованный ранг
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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