powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Ранжировать по логической группе
4 сообщений из 4, страница 1 из 1
Ранжировать по логической группе
    #39735347
Landgraf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ребята всем привет!

Подскажите, пожалуйста, как можно выделить логический блок и ранжировать его? Есть таблица с данными, логический блок начинается с записи Start и идет до тех пор пока не встретит новую запись Start. Если встречается новая запись Start, то начинается новый блок. Данные в таблице уже отсортированы.

Тестовые данные:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
With TestTable (id, ndate, code) as
    (select 1, trunc(sysdate),'start' from dual union all
    select 2, trunc(sysdate),'a' from dual union all
    select 3, trunc(sysdate),'b' from dual union all
    select 4, trunc(sysdate),'start' from dual union all
    select 5, trunc(sysdate),'a' from dual)
    



idndatecode119.11.18start219.11.18a319.11.18b419.11.18start519.11.18a

Хотелось бы ранжировать группу, для дальнейшей работы с ней. Вот так:

idndatecodeРанг119.11.18start1219.11.18a1319.11.18b1419.11.18start2519.11.18a2

Не могу сообразить, как написать запрос.
...
Рейтинг: 0 / 0
Ранжировать по логической группе
    #39735353
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
STFF start_of_group
Код: plsql
1.
sum(case code when 'start' then 1 end) over (order by id) as group_no

...
Рейтинг: 0 / 0
Ранжировать по логической группе
    #39735355
feagor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Landgraf,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
With t (id, ndate, code) as
    (select 1, trunc(sysdate),'start' from dual union all
    select 2, trunc(sysdate),'a' from dual union all
    select 3, trunc(sysdate),'b' from dual union all
    select 4, trunc(sysdate),'start' from dual union all
    select 5, trunc(sysdate),'a' from dual)
    SELECT sum(sog) over (order by id)rn,tt.* FROM ( SELECT case code when 'start' then 1 else 0 end sog,t.*  FROM t) tt
    
...
Рейтинг: 0 / 0
Ранжировать по логической группе
    #39735360
Landgraf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо комрады!
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Ранжировать по логической группе
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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