当我检查排名的频率低于排名变化时,如何检测排名变化?
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。
我有一些像这样的原始数据:
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。