MySQLでのパーティションを使用して、増分数を取得します。

ニハル:

私はいくつかのユニークなシナリオを持っています

入力:

   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バージョンで利用可能であることに注意してください。

おすすめ

転載: http://10.200.1.11:23101/article/api/json?id=8271&siteId=1