коллег по укладке
У меня есть такой набор данных:
+---------+------+--------+
| user_id | date | metric |
+---------+------+--------+
| 1 | 1 | 1 |
| 1 | 2 | 1 |
| 1 | 3 | 1 |
| 2 | 1 | 1 |
| 2 | 2 | 1 |
| 2 | 3 | 0 |
| 2 | 4 | 1 |
+---------+------+--------+
Я хочу отметить тех клиентов, у которых есть 3 последовательных "1" в столбце metri c , У меня есть решение, как показано ниже.
select distinct user_id
from (
select user_id
,metric +
ifnull( lag(metric, 1) OVER (PARTITION BY user_id ORDER BY date), 0 ) +
ifnull( lag(metric, 2) OVER (PARTITION BY user_id ORDER BY date), 0 )
as consecutive_3
from df
) b
where consecutive_3 = 3
Пока оно работает, оно не масштабируется. Как можно себе представить, как бы выглядел приведенный выше запрос, если бы я искал последовательные 50. Могу ли я спросить, есть ли масштабируемое решение? Подойдет любое облако SQL. Спасибо.