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

Posted

技术标签:

【中文标题】SQL查询查找每个用户的活动时间【英文标题】:SQL Query to find the activity time of each user 【发布时间】:2020-09-12 12:43:28 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

这是一个孤岛问题。您可以通过减去一个序列将它们组合在一起:

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;

Here 是一个 dbfiddle。

【讨论】:

非常感谢,但是如何在 max(date) 和 length 之间添加状态并将 min(date) 重命名为 start_date?? @alirezana 。 . .哎呀。我把状态放在group by,而不是select。固定。

以上是关于SQL查询查找每个用户的活动时间的主要内容,如果未能解决你的问题,请参考以下文章

根据时间范围对用户活动进行分组的 SQL 查询

查询用户出现在表中后的前 48 小时活动 (HiveQL / SQL)

在 Synapse 管道中编写 SQL 查询查找活动返回错误消息

选择所有非活动用户的 Sql 查询

SQL查询获得每个帐户的最新活动(有效查询)

查找 sql 查询以获取每个分组的最新关联日期