with e as (
select '1' sku, 'active' status, toInt32('11') dttm
union all
select '1' sku, 'active' status, toInt32('12') dttm
union all
select '1' sku, 'active' status, toInt32('13') dttm
union all
select '1' sku, 'not active' status, toInt32('14') dttm
union all
select '1' sku, 'not active' status, toInt32('15') dttm
union all
select '1' sku, 'not active' status, toInt32('16') dttm
union all
select '1' sku, 'active' status, toInt32('17') dttm
union all
select '1' sku, 'active' status, toInt32('18') dttm
union all
select '1' sku, 'active' status, toInt32('19') dttm
)
, 'active' as ch
select
sequence
, arrayEnumerate(sequence) indexes
, arraySplit((x, i) -> (sequence.1)[i] = ch and (sequence.1)[i-1] <> ch or (sequence.1)[i] <> ch and (sequence.1)[i - 1] = ch, sequence, indexes) res
from (
SELECT groupArray(tuple(status, dttm)) as sequence
from e
group by sku
) a
输出
+-------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------+
|sequence |res |
+-------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------+
|[('active',11),('active',12),('active',13),('not active',14),('not active',15),('not active',16),('active',17),('active',18),('active',19)]|[[('active',11),('active',12),('active',13)],[('not active',14),('not active',15),('not active',16)],[('active',17),('active',18),('active',19)]]|
+-------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------+