我有一些這樣的原始資料:
| 團隊 | 排行 |
|---|---|
| 1 | 1 |
| 2 | 8 |
| 3 | 2 |
| 4 | 6 |
| 5 | 3 |
| 6 | 5 |
| 7 | 4 |
| 8 | 7 |
每月一次,我將其復制到我的資料庫中,添加“上次更新”列以指示該行上次更新的每月更新運行。但是,由于排名的作業方式,如果一個排名發生變化,那么其他一些排名也會發生變化。我的問題是,我只想在有問題的行的排名已被明確更改時才更新“上次更新”列。例如,如果 Team 5 上升了兩個等級,那么我只想將 Team 5 的行標記為已更新。我不想更改他們剛剛超越的兩支球隊的行的“最后更新”列中的任何內容。我該如何實施?
一個關鍵因素是有意的更改一次只能發生一個,但由于我只每月檢查一次,我幾乎總是會看到多個更改。困難在于檢測哪個團隊的隊伍被有意移動,而不是僅僅因為其他資料而移動。
例如,考慮一下在我的每月檢查之間的原始資料中是否發生了以下兩個變化(有意更改為粗體):
| 團隊 | 原始排名 | 第一次更改后的排名 | 第二次變化后的排名 |
|---|---|---|---|
| 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 |
如果發生這種情況,那么我希望我處理的資料中每個更改的行都更新其排名,但我只希望為 Team 3 和 Team 8 更新“上次更新”列。
例如,如果現在是第 36 個月,我希望我處理的資料來自
| 團隊 | 排行 | 最近更新時間 |
|---|---|---|
| 1 | 1 | 31 |
| 2 | 8 | 31 |
| 3 | 2 | 32 |
| 4 | 6 | 33 |
| 5 | 3 | 34 |
| 6 | 5 | 35 |
| 7 | 4 | 31 |
| 8 | 7 | 31 |
到
| 團隊 | 排行 | 最近更新時間 |
|---|---|---|
| 1 | 1 | 31 |
| 2 | 8 | 31 |
| 3 | 6 | 36 |
| 4 | 7 | 33 |
| 5 | 2 | 34 |
| 6 | 4 | 35 |
| 7 | 3 | 31 |
| 8 | 5 | 36 |
Is this possible to implement in T-SQL? At this point, I don't care even if I have to resort to using cursors.
uj5u.com熱心網友回復:
無論語言如何,在演算法級別上確定多個步驟都是不可能的。
例子:
初始隊伍排名:A,B,C
最終隊伍排名:B,C,A
你不知道這是 A 從 1 級到 3 級的一步,還是 A 從 1 級到 2 級然后從 2 級到 3 級的兩級。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/436445.html
標籤:sql-server tsql ranking batching
