ニハル:
私はいくつかのユニークなシナリオを持っています
入力:
VAR
1 A
2 A
3 A
4 NULL
5 NULL
6 A
7 A
8 A
9 B
10 B
11 B
12 NULL
13 B
14 B
15 B
16 C
17 C
18 C
19 C
私は上記の順に入力データを持っています。私はランクが分配カラムVARを使用して、出力列を作成する必要があります。nullはそれの間に存在する場合でも、ランクのカウンタをリセット取得する必要があります。
予想される出力:
VAR output
1 A 1
2 A 2
3 A 3
4 NULL
5 NULL
6 A 1
7 A 2
8 A 3
9 B 1
10 B 2
11 B 3
12 NULL
13 B 1
14 B 2
15 B 3
16 C 1
17 C 2
18 C 3
19 C 4
GMB:
これは、ギャップと島問題のように見えます。あなたは、レコードの順序を定義する別の列(と言うと、持っていると仮定するとid
)、ここでは隣接するレコードのグループを定義する行数の差を利用したアプローチは以下のとおりです。
select
var,
case when var is not null
then row_number() over(partition by var, rn1 - rn2 order by id)
end rnk
from (
select
t.*,
row_number() over(order by id) rn1,
row_number() over(partition by var order by id) rn2
from mytable t
) t
order by id
ウィンドウ関数は(バージョン8.0)でのみ、最新のMySQLバージョンで利用可能であることに注意してください。