当我检查排名的频率低于排名变化时,如何检测排名变化?

How can I detect ranking changes when I'm checking the ranks less frequently than they change?

我有一些像这样的原始数据:

Team Ranking
1 1
2 8
3 2
4 6
5 3
6 5
7 4
8 7

我每月一次将其复制到我的数据库中,添加一个“上次更新”列以指示该行上次更新的每月更新 运行。但是,由于排名的工作方式,如果一个排名发生变化,那么其他一些排名也会发生变化。 我的问题是,我只想在相关行的排名已明确更改时更新“上次更新”列。例如,如果第 5 队上升两个排名,则我只想将 Team 5 的行标记为已更新。我不想更改他们刚刚超过的两个团队的行的“最后更新”列中的任何内容。我该如何实施?

一个关键因素是有意的更改一次只能发生一个,但由于我只是每月检查一次,所以我几乎总是会看到多个更改。困难在于检测哪个团队的排名被有意移动,而不是仅仅因为其他数据而移动。

例如,考虑在我的每月检查之间原始数据是否发生了以下两个更改(粗体为故意更改):

Team Original Ranking Ranking After First Change Ranking After Second Change
1 1 1 1
2 8 8 8
3 2 5 6
4 6 6 7
5 3 2 2
6 5 4 4
7 4 3 3
8 7 7 5

如果发生这种情况,那么我希望我处理的数据中每个更改的行都更新其排名,但我只希望为团队 3 和团队 8 更新“上次更新”列。

例如,如果现在是第 36 个月,我希望我处理的数据来自

Team Ranking Last Updated
1 1 31
2 8 31
3 2 32
4 6 33
5 3 34
6 5 35
7 4 31
8 7 31

Team Ranking Last Updated
1 1 31
2 8 31
3 6 36
4 7 33
5 2 34
6 4 35
7 3 31
8 5 36

这可以在 T-SQL 中实现吗?这时候,就算是用游标我也不在乎了。

无论语言如何,在算法层面不可能确定多个步骤。

示例:

初始队伍排名:A,B,C

最终球队排名:B,C,A

你不知道这是从1级到3级的一步A,还是从1级到2级再从2级到3级的两级A。