«Partition by» в предложении OVER группирует все значения как уникальные, точно так же, как «Distinct» или «Group by» do.
Вот как это работает в моем запросе с row_number ():
id st t row_number
-------------------
1 1 1 1
1 1 2 2
1 1 3 3
2 1 3 1
1 2 4 1
1 1 10 4
Вот что я хочу:
id st t uniq_row_number
------------------
1 1 1 1
1 1 2 2
1 1 3 3
2 1 3 1
1 2 4 1
1 1 10 1
Независимо от того, была ли новая строка ранее, она читается как новый раздел после каждого изменения раздела.
Если раздел повторяется, значит, uniq_row_number получает +1. Если новый раздел приходит с новой строкой: boom, он получает uniq_row_number 1.
Мой SQL-запрос:
SELECT id, st, t,
row_number() OVER (PARTITION BY id, st ORDER BY id, st) cat_num,
min(t) over (PARTITION BY id, st) min_t,
max(t) over (PARTITION BY id, st) max_t
FROM tabl ORDER BY t;
Код SQL здесь: http://sqlfiddle.com/#!18/d4290/2