SQL для генерации общей последовательности для каждой группы - PullRequest
0 голосов
/ 03 июля 2019

у меня есть данные ниже.

a_id    state   date

1   A   7/5/19

1   A   7/6/19

1   M   7/7/19

1   M   7/8/19

1   A   7/9/19

1   A   7/10/19

1   A   7/11/19

1   M   7/12/19

Я хочу сгенерировать последовательность, используя SQL для каждой группы в порядке их поступления.

например, есть 2 группы для A, так как они не пришли в той же последовательности. аналогично для М. См ожидаемый результат ниже.

a_id    state   date    result col

1   A   7/5/19  1

1   A   7/6/19  1

1   M   7/7/19  2

1   M   7/8/19  2

1   A   7/9/19  3

1   A   7/10/19 3

1   A   7/11/19 3

1   M   7/12/19 4

1 Ответ

0 голосов
/ 03 июля 2019

Это проблема пробелов и островков.Вы можете использовать lag() и совокупную сумму:

select t.*,
       sum(case when state = prev_state then 0 else 1 end) over (partition by a_od order by date) as result
from (select t.*,
             lag(state) over (partition by a_id order by date) as prev_state
      from t
     ) t;
...