问题描述
我们如何使用这些数据来计算每个时期内每个用户的活动?
user_id date status
101 2018-01-1 1
101 2018-01-2 0
101 2018-01-3 1
101 2018-01-4 1
101 2018-01-5 1
输出:
user_id start_date end_date status length
101 2018-01-1 2018-01-1 1 1
101 2018-01-2 2018-01-2 0 1
101 2018-01-3 2018-01-5 1 3
解决方法
这是一个空白问题。您可以通过减去一个序列将它们分组在一起:
select user_id,status,min(date),max(date),julianday(max(date)) - julianday(min(date)) as length
from (select t.*,row_number() over (partition by user_id,status order by date) as seqnum
from t
) t
group by user_id,date(date,'-' || seqnum || ' day')
order by user_id,length;
Here是db 小提琴。