私は次のようなデータセットを持っています
name date
x 2014-01-01
x 2014-01-02
y 2014-01-03
x 2014-01-04
そして私はこの結果を得ようとしています
name date row_num
x 2014-01-01 1
x 2014-01-02 2
y 2014-01-03 1
x 2014-01-04 1
私はこのクエリを実行しようとしました
select name,
date,
row_number () over (partition by name order by date) as row_num
from myTBL
しかし残念ながら私はこの結果を得る
name date row_num
x 2014-01-01 1
x 2014-01-02 2
y 2014-01-03 1
x 2014-01-04 3
助けてください。
一緒に発生するnames
のグループを識別する必要があります。行番号の違いでこれを行うことができます。次に、grp
を使用してrow_number()
を分割します。
select name, date,
row_number() over (partition by name, grp order by date) as row_num
from (select t.*,
(row_number() over (order by date) -
row_number() over (partition by name order by date)
) as grp
from myTBL t
) t
サンプルデータの場合:
name date 1st row_number 2nd Grp
x 2014-01-01 1 1 0
x 2014-01-02 2 2 0
y 2014-01-03 3 1 2
x 2014-01-04 4 3 1
これにより、それがどのように機能するかがわかります。