и атрибут, который определяет было на этой неделе событие или не было (1 или 0).
Так вот для каждой недели нужно посчитать как долго (т.е. сколько недель подряд) продолжается это событие. Этакая нарастающая сумма, с условием прерывания.
На скрине немного понятнее отобразил.
Смотрю в сторону функций работающих с array, но пока ничего работающего не обнаружил.
Может кто-то уже решал подобную задачу?) решить нужно без использования оконок, наш клик их не поддерживает
Выглядит как классическая задача для оконной функции.
Да, кстати, забыл сказать, что это нужно решить без оконной функции) наша версия клика не поддерживает их
https://kb.altinity.com/altinity-kb-queries-and-syntax/cumulative-unique/#using-arrays
Если кому интересно, нашёл решение без оконок with t as ( select 202151 as yyyyww, 1 as foo union all select 202152 as yyyyww, 1 as foo union all select 202153 as yyyyww, 1 as foo union all select 202201 as yyyyww, 1 as foo union all select 202202 as yyyyww, 0 as foo union all select 202203 as yyyyww, 0 as foo union all select 202150 as yyyyww, 0 as foo ) ,t1 as ( select *, toInt64(rowNumberInAllBlocks())+1 as row_num from (select * from t order by yyyyww) tt order by yyyyww ) select m.yyyyww, m.foo , if(m.foo = 1, max(case when t_min.foo = 1 then t_min.row_num else 0 end)- max(case when t_min.foo = 0 then t_min.row_num else 0 end) - 1, 0) as t from t1 as m , t1 as t_min where t_min.row_num <= m.row_num group by m.yyyyww, m.foo order by m.yyyyww
Обсуждают сегодня