Ответ 1
Вам нужно идентифицировать группы 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
Это должно дать вам представление о том, как это работает.