Я хочу увеличить номер строки в момент изменения значения - PullRequest
0 голосов
/ 02 мая 2019

Я хочу увеличить номер строки в момент изменения значения. (в Amazon-Redshift)

Я не знаю, в каких условиях указывать номер строки.

row_number () более (упорядочено по id, отметке времени) row_num

 id      ts   value    row_number
p051  |  ts | 20    |      1
p051  |  ts | 20    |      1
p051  |  ts | 20    |      1
p051  |  ts | 25    |      2
p051  |  ts | 20    |      3
p051  |  ts | 20    |      3
p051  |  ts | 30    |      4
p051  |  ts | 30    |      4

Заранее спасибо.

1 Ответ

0 голосов
/ 02 мая 2019

Таблицы 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) для спецификации окна.

...