Номер строки для увеличения карты времени в улье - PullRequest
0 голосов
/ 08 мая 2020

У меня есть такая таблица:

col1    col2
1      2020-01-15
1      2020-01-16
1      2020-01-17
1      2020-01-18
1      2020-01-20
2      2020-01-09
2      2020-01-10
2      2020-01-15

, и я вычисляю ранг вот так

select
    col1,
    col2,
    date_sub(col2, -row_number() over (partition by col1 order by col2)) as rnk
  from myTable

и получаю ранг

col1    col2        rnk
1      2020-01-15   1
1      2020-01-16   2
1      2020-01-17   3
1      2020-01-18   4
1      2020-01-20   5
2      2020-01-09   1
2      2020-01-10   2
2      2020-01-15   3

, но мне нужен ранг вот так

col1    col2        rnk
1      2020-01-15   1
1      2020-01-16   2
1      2020-01-17   3
1      2020-01-18   4
1      2020-01-20   1
2      2020-01-09   1
2      2020-01-10   2
2      2020-01-15   1

изменяется всякий раз, когда последовательное изменение даты, например 18 и 20, не является последовательным для пользователя 1, поэтому его можно изменить, я не уверен, как этого добиться

1 Ответ

1 голос
/ 08 мая 2020

Вы можете использовать:

select t.*,
       row_number() over (partition by col1, date_add(col2, - seqnum) order by col2) as rank
from (select t.*, row_number() over (partition by col1 order by col2) as seqnum
      from t
     ) t;

Внешний row_number() вычитает последовательность из col2. Результатом будет константа, когда в соседних значениях нет пробелов. Итак, разница определяет «острова» соседних записей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...