SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 08.06.2022 12:17:48

dima_b
Участник
Зарегистрирован: 08.06.2022
Сообщений: 3

ранжирование строк postgresql

Всем привет. По работе столкнулся с задачей.
Суть - есть некий сервисный запрос (в процессе обработки он меняет свой статус, (в работе, закрыт, передан и тд.)). Каждый раз когда статус меняется мне надо присвоить очередной шаг (ранжировать строки). Оконная функция dence_rank () не подходит.
Потому что, каждому статусу присваивает свой уникальный ранг. Например, запрос изначально в статусе "в работе" - ренк 1, далее переходит в статус "в ожидании" - ранк 2, затем снова возвращается в статус "в работе" - мне нужно присвоить записи ранг 3, а sql присвоит - 1. Пример в ексельке прикрепил. Задача кажется простой, но я завис на несколько дней, ничего не могу придумать.
Сможете помочь?


Прикрепленные файлы:
Attachment Icon пример задачи.xlsx, Размер: 9,256 байт, Скачано: 270

Неактивен

 

#2 08.06.2022 17:01:49

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5827

Re: ранжирование строк postgresql

row_number() over (partition by id order by valid_from asc)

Неактивен

 

#3 09.06.2022 00:01:17

dima_b
Участник
Зарегистрирован: 08.06.2022
Сообщений: 3

Re: ранжирование строк postgresql

Привет, этот способ не помогает. Пробовал.
По этому принципу каждая строка в подгруппе будет проранжирована уникальным значением, т.к. valid_from в каждой строчке уникален.

valid_from  и valid_to это историчность изменения записи о  запросе

Суть верна. Надо группировать по id (запрос) и order by по valid_from (т.к. я хочу отследить изменение статуса запроса от момента его создания до момента закрытия). Для этого
каждый раз когда запрос переходит из одного статуса в другой я присваиваю строчке +1 (на 1 больше чем в предыдущей записи). Если в двух строках подряд статус не менялся то +1 не нужен, у этих строк будет одинаковая циферка.
Подошла бы функция dence ranc () но она всём одинаковым статусам присваивает одинаковое значение. Допустить запрос в статусе 'в работе' - 1, затем снова в работе (все ещё - 1) затем в статусе 'передан' - 2, затем снова в работе (и вот здесь мне надо присвоил шаг - 3, а  dence_ranc () присвоит - 1). row number  каждой строке присваивает уникальное значение, а мне нужно чтобы у двух строк идущих подряд в которых статус не меняется было одинаковое значение. Всё это не то.

Отредактированно dima_b (09.06.2022 00:09:46)

Неактивен

 

#4 12.06.2022 22:32:37

dima_b
Участник
Зарегистрирован: 08.06.2022
Сообщений: 3

Re: ранжирование строк postgresql

Ребят мб есть варианты у кого? Вопрос актуален.

Неактивен

 

#5 13.06.2022 00:12:58

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5827

Re: ранжирование строк postgresql

Пронумеровать с помощью пользовательских переменных. См Оптимизация запросов MySQL с использованием пользовательских переменных

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson