【问题标题】:SQL Query to find the activity time of each userSQL查询查找每个用户的活动时间
【发布时间】: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

【问题讨论】:

    标签: sql sqlite gaps-and-islands


    【解决方案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。固定。
    猜你喜欢
    • 2022-08-16
    • 1970-01-01
    • 2020-08-31
    • 1970-01-01
    • 2023-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多