SQL Сервер - скользящее назначение заказа / ранга Varchar с лимитом - PullRequest
0 голосов
/ 18 июня 2020

Я пытаюсь отсортировать записи по дате и строке и присвоить каждой из них ограниченный (от 1 до 6) ранг. Если одна из записей становится неактивной и имеет дату окончания, я хочу переназначить ее исходный ранг новой записи, которая ее заменяет, без изменения исходного ранга оставшихся активных записей.

Вот пример использования людей и офисных заданий. 1

Базовый запрос и данные:

SELECT
Region
,Year
,Person Name
,Person Start Date
,Person End Date
,Person ID
FROM UserTable
WHERE Year = '2020'

В моем примере количество доступных столов ограничено 6. В любой момент времени в регионе будет только 6 активных людей, но со временем эти люди будут меняться в зависимости от даты начала и окончания.

Если я начну 2020 год с 6 людьми, я могу логически назначить им стол (1-6) на основе их даты начала и идентификатора, но если кто-то уйдет и его заменит новый человек, я хочу, чтобы новый человек будет назначен на теперь открытый стол того человека, который ушел.

В связанном изображении желаемый результат - последний столбец. Человек 3 изначально был назначен на стол 3, но ушел в мае. Человек 7 начал работу в мае, и я хочу, чтобы его назначили за стол 3. Я хочу, чтобы другие люди оставались закрепленными за столами, которые им изначально были назначены.

Базовые данные с результатом, начиная с января:

Region      Year    Person      Start Date  End Date    ID  Initial Desk
Region ABC  2020    Person 1    1/1/2019                101 1
Region ABC  2020    Person 2    1/1/2019                102 2
Region ABC  2020    Person 3    1/1/2019    5/1/2020    103 3
Region ABC  2020    Person 4    3/1/2019                104 4
Region ABC  2020    Person 5    1/1/2020                105 5
Region ABC  2020    Person 6    1/1/2020                106 6

Я могу использовать номера строк, чтобы назначить столы в начале года, когда есть только 6 человек, но это будет работать только в начале года, предшествующего любым изменениям.

ROW_NUMBER() OVER(PARTITION BY [Region],[Year] ORDER BY [Start Date] ASC,[Person ID] DESC) AS [Initial Desk]

Базовые данные с желаемым результатом, начиная с мая:

Region      Year    Person      Start Date  End Date    ID  Rolling Desk
Region ABC  2020    Person 1    1/1/2019                101 1
Region ABC  2020    Person 2    1/1/2019                102 2
Region ABC  2020    Person 3    1/1/2019    5/1/2020    103 NULL
Region ABC  2020    Person 4    3/1/2019                104 4
Region ABC  2020    Person 5    1/1/2020                105 5
Region ABC  2020    Person 6    1/1/2020                106 6
Region ABC  2020    Person 7    5/1/2020                107 3

I ' Я застрял на том, как я могу использовать номера строк, чтобы переназначить стол 3 человеку 7 и оставить всех остальных без изменений.

Обратите внимание, что данные будут меняться со временем, поэтому они должны будут работать в момент изменения данных. Это также должно было бы работать в заднем сценарии ios, таком как этот, где у меня есть 7 датированных записей, но только 6 столов. Можно было бы работать с месяцами как версиями, однако основной метод потребления будет живым, а исторические данные будут второстепенными.

Я уверен, что есть более простой способ сделать это, но я самоучка и не знаю всех трюков logi c. Это мой первый пост, так что извиняюсь, если я ... нарушаю звание ... здесь. Приветствуются любые советы!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...