Итак, я хочу, чтобы пользователи могли отслеживать количество последовательных входов за недели.Я попытался row_number () Over (разделение по государственному заказу по неделям), но row_numbers не сбрасываются при изменении состояния.Вот пример таблицы.
user_id | week | state
--------+--------------+-------
1 | 2018-01-01 | Active
1 | 2018-01-08 | Inactive
1 | 2018-01-15 | Inactive
1 | 2018-01-22 | Active
1 | 2018-01-29 | Active
2 | 2018-01-01 | Inactive
2 | 2018-01-08 | Active
2 | 2018-01-15 | Inactive
2 | 2018-01-22 | Active
2 | 2018-01-29 | Active
Я хочу, чтобы вывод выглядел так:
user_id | week | state | streak
--------+--------------+----------+---------
1000 | 2018-01-01 | Active | 1
1000 | 2018-01-08 | Inactive | 1
1000 | 2018-01-15 | Inactive | 2
1000 | 2018-01-22 | Active | 1
1000 | 2018-01-29 | Active | 2
2000 | 2018-01-01 | Inactive | 1
2000 | 2018-01-08 | Active | 1
2000 | 2018-01-15 | Inactive | 1
2000 | 2018-01-22 | Active | 1
2000 | 2018-01-29 | Active | 2
Это мой текущий запрос:
SELECT
week,
user_id,
state,
row_number()
OVER(PARTITION BY user_id, state
order by user_id, week) AS streak
FROM
t.data_table
GROUP BY 1,2,3
order by week;
Мой вывод в настоящее время выглядит следующим образом:
user_id | week | state | streak
--------+--------------+----------+---------
1000 | 2018-01-01 | Active | 1
1000 | 2018-01-08 | Inactive | 1
1000 | 2018-01-15 | Inactive | 2
1000 | 2018-01-22 | Active | 2
1000 | 2018-01-29 | Active | 3
2000 | 2018-01-01 | Inactive | 1
2000 | 2018-01-08 | Active | 1
2000 | 2018-01-15 | Inactive | 2
2000 | 2018-01-22 | Active | 2
2000 | 2018-01-29 | Active | 3
Любые предложения здесь будут полезны.