В SQL есть способ разделения по значению, если оно не является непрерывным - PullRequest
0 голосов
/ 17 мая 2018

Я хотел бы сделать ранжирование значений по разделу с двумя столбцами.col1 будет ключом, а col2 будет некоторым значением, которое также будет использоваться в ORDER BY.Я хотел бы начать новый раздел только тогда, когда col2 прекращено.Например, я хотел бы сделать следующее:

+------+------+------+
| col1 | col2 | rank |
+------+------+------+
| a    |    1 |    1 |
| a    |    2 |    2 |
| a    |    3 |    3 |
| a    |    9 |    1 |
| a    |   10 |    2 |
| b    |    1 |    1 |
| b    |    2 |    2 |
| b    |    8 |    1 |
+------+------+------+

Мышление где-то в строках SELECT col1, RANK() OVER (PARTITION BY col1, SOMETHING HERE??? ORDER BY col2 DESC)

У кого-нибудь есть идеи?

1 Ответ

0 голосов
/ 17 мая 2018

Если я правильно понимаю, вы хотите перечислить "островками" смежных последовательных значений. Вы можете сделать это с простым наблюдением: вычитание последовательности из col2 будет постоянным для каждой группы. Итак, давайте использовать это наблюдение:

select t.*,
       row_number() over (partition by col1, grp order by col1) as rnk
from (select t.*,
             (col2 - row_number() over (partition by col1 order by col2)) as grp
      from t
     ) t
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...