Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.10.2021, 00:03   #1
NatM
 
Регистрация: 01.10.2021
Сообщений: 9
По умолчанию Анализ допустимости переходов в цикле в PostrgSQL

Есть таблица ObjectsHistory oh, в которой описаны переходы Объектов из статуса в статус (прилагается, лист "Исходные данные").
Есть правила: из какого статуса в какие статусы переходы являются допустимыми, а в какие - недопустимыми. Эти правила заданы на листе "Допустимые переходы". История каждого объекта должна начинаться только со Статуса ObjectStatus1, любой другой статус в начале истории объекта - Incorrect
Переход из ObjectStatus7 в ObjectStatus8 и из ObjectStatus8 в ObjectStatus7 допускается только в случае, если он осуществлен Системой (CreatedBy = 'System').


Как сформировать выгрузку таблицы с дополнительной колонкой "StatusChangeIsCorrect", в которой будет сделана отметка о допустимости или недопустимости каждого из переходов (Correct, Incorrect)?
Прилагается файл, вид итоговой выборки - на листе "Конечный результат".
Вложения
Тип файла: xls TablesStatusChange.xls (38.0 Кб, 1 просмотров)
NatM вне форума Ответить с цитированием
Старый 06.10.2021, 12:20   #2
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,150
По умолчанию

не очень понятно - каким боком Эксель к SQL относится, но в общем случае я бы сделал так:

1. Все допустимые ограничения записал бы в таком виде
createdBy, Status_start, Status_end, inStart
null, status1, status2, 1
system, status1, status8, 0
null, status2, status1, 0
null, status2, status3, 0

где inStart - 0/1 в зависимости от того, начало истории или нет

потом на основе исходных данных строить цепочки переходом и сверять их с текущей таблицей допустимых - соответственно выставлять нужный статус correct/incorrect

честно скажу - на знаю как такое реализовать силами только SQL

если задача не теоретическая/учебная - я бы подумал об изменении формата хранения входных данных, а именно - записывал бы еще в одно поле - из какого статуса переходит, и является ли запись началом истории объекта...

ну и циклы в SQL - то еще зло
ADSoft вне форума Ответить с цитированием
Старый 25.10.2021, 15:38   #3
NatM
 
Регистрация: 01.10.2021
Сообщений: 9
По умолчанию

Спасибо! Да, допустимые ограничения примерно в таком виде записываю в таблице в БД. Вся проблема в том, как сделать оптимальный цикл, т.к. циклы в SQL действительно медленно проходят, а данных много.
NatM вне форума Ответить с цитированием
Старый 25.10.2021, 15:38   #4
NatM
 
Регистрация: 01.10.2021
Сообщений: 9
По умолчанию

Закрываю вопрос. Вопрос отпал.
NatM вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Замена временных таблиц в PostrgSQL NatM SQL, базы данных 1 25.10.2021 15:34
Отслеживание переходов bpystep Помощь студентам 1 01.04.2012 13:40
Предусмотреть возможность раздельного изменения составных частей адреса и проверки допустимости вводимых значений Firagon C# (си шарп) 3 08.06.2011 10:43
Анализ интернет странички в цикле? DelPavel Общие вопросы Delphi 5 01.12.2009 16:58
Счётчик переходов по ссылке boro-da HTML и CSS 1 31.03.2009 11:14