带限制的滚动varchar顺序/秩分配

5jvtdoz2  于 2021-07-26  发布在  Java
关注(0)|答案(0)|浏览(167)

我试图按日期和字符串对记录进行排序,并为每个记录分配一个有限的(1到6)等级。如果其中一条记录变为非活动记录并且已过期,我想将其原始排名重新分配给替换它的新记录,而不更改其余活动记录的原始排名。
下面是一个使用人员和办公桌分配的示例。1
基本查询数据(&D):

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

在我的例子中,可以坐的table数量限制为6张。一个地区在任何一个时间点上只有6个活跃的人,但是这些人会随着时间的推移而改变,这取决于他们的开始和结束日期。
如果我在2020年开始时有6个人,我可以根据他们的开始日期和身份,逻辑上给他们每人分配一张table(1-6张),但是如果有人离开,被换成了一个新的人,我希望这个新的人被分配到离开的人现在打开的table上。
在链接的图像中,我想要的结果是最后一列。3号人原本被分配到3号办公桌,但在5月份离开。第七个人五月份开始工作,我想把他们分配到第三个办公桌。我希望其他人继续留在原来分配给他们的table上。
基本数据,结果从1月开始:

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

我被困在如何使用行号将3号办公桌重新分配给7号办公桌,而让其他人保持不变。
注意数据会随着时间的推移而变化,因此它需要在数据变化时工作。它还需要在像这样的情况下,我有7个过时的记录,但只有6张table过时的工作。可以将月份作为版本使用,但是主要的消费方法是实时的,历史记录是次要的。
我相信有一个更简单的方法,但我自学成才,不知道所有的逻辑技巧。这是我的第一篇帖子,如果我。。。打破军衔。。。在这里。任何建议都非常感谢!

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题