Я пытаюсь отсортировать записи по дате и строке и присвоить каждой из них ограниченный (от 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. Это мой первый пост, так что извиняюсь, если я ... нарушаю звание ... здесь. Приветствуются любые советы!