Группировка по данным с одной и той же группой встречается несколько раз - PullRequest
0 голосов
/ 16 апреля 2020

Входные данные

идентификатор группы

1 a

1 a

1 b

1 b

1 a

1 a

1 a

ожидаемый результат

идентификатор группы row_number

1   a   1

1   a   1

1   b   2

1   b   2

1   a   4

1   a   4

1   a   4

Мне требуется номер rwo_number на вышеупомянутый результат. Если одна и та же группа встречается во второй раз, генерирует другое row_number для этого? У меня есть еще одна последовательность столбцов даты сверху вниз.

1 Ответ

0 голосов
/ 16 апреля 2020

Это пример проблемы пробелов и островков. Однако для ее решения необходимо упорядочить данные - и таблицы SQL представляют собой неупорядоченные наборы.

Позвольте мне предположить, что у вас есть такой столбец. Тогда можно использовать разницу номеров строк:

select t.*,
       dense_rank() over (partition by id order by grp, (seqnum - seqnum_g)) as grouping
from (select t.*,
             row_number() over (partition by id order by ?) as seqnum,
             row_number() over (partition by id, grp order by ?) as seqnum_g
      from t
     ) t;

Это не приводит к значениям, которые вы специально запрашиваете, но идентифицирует каждую группу.

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