SQL查询以查找每个用户的活动时间
我们如何使用这些数据来计算每个时期每个用户的活动SQL查询以查找每个用户的活动时间,sql,sqlite,gaps-and-islands,Sql,Sqlite,Gaps And Islands,我们如何使用这些数据来计算每个时期每个用户的活动 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 s
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, status, date(date, '-' || seqnum || ' day')
order by user_id, length;
非常感谢,但是我怎样才能在最大值(日期)和长度之间添加状态,并重命名最小值(日期)以开始日期???@alirezana。哎呀。我将状态放在
分组依据中,但不放在选择中。固定的。