【问题标题】:How can I calculate user session time from heart beat data in Presto SQL?如何根据 Presto SQL 中的心跳数据计算用户会话时间?
【发布时间】:2021-09-27 14:25:47
【问题描述】:

当用户通过心跳激活时,我目前正在录制。它存储在这样的表中:

User ID Minute of Day
1 3
1 4
1 5
1 8
1 9
2 2
2 3
2 4
  • 用户 ID 1 从 3 到 5 处于活动状态,但从 6 到 7 处于非活动状态,然后从 8 到 9 再次变为活动状态。

  • 用户 ID 1 活跃了 3 分钟:(5-3 + 9-8) = 3

  • 用户 ID 2 活跃了 2 分钟:4-2 = 2

如何使用 SQL (Presto) 查询进行计算?

输出应该是这样的:

User ID Total Minutes
1 3
2 2

【问题讨论】:

    标签: sql amazon-athena presto


    【解决方案1】:

    您可以尝试以下方法,它使用滞后函数来确定活跃期 (diff = 1),然后再对它们求和

    SELECT 
        USERID, 
        SUM(diff) as TotalMinutes
    FROM (
        SELECT
           UserId,
           (MinuteofDay - LAG(MinuteofDay,1,MinuteofDay) OVER (PARTITION BY UserId ORDER BY MinuteofDay)) as diff
        FROM
            my_table
        ) t
    WHERE 
        diff = 1
    GROUP BY 
        UserID;
    
    userid TotalMinutes
    1 3
    2 2

    View on DB Fiddle

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-01-12
      • 2022-10-24
      • 2017-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-25
      相关资源
      最近更新 更多