Таблицы SQL представляют неупорядоченные наборы. Ваш запрос, по-видимому, принимает заказ, поэтому я предполагаю, что имеется столбец с информацией о заказе, который я буду считать timestamp
.
Вы можете использовать lag()
, чтобы получить предыдущее значение, а затем накопительную сумму:
select t.*,
sum(case when value = prev_value then 0 else 1 end) over (order by id, timestamp)
from (select t.*,
lag(value) over (order by id, timestamp) as prev_value
from t
) t;
Обратите внимание, что это увеличивает значения по всем данным. Часто целью является перезапуск нумерации для каждого id
. В этом случае используйте (partition by id order by timestamp)
для спецификации окна.