SQL查询以查找每个用户的活动时间

问题描述

我们如何使用这些数据来计算每个时期内每个用户的活动?

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 小提琴。