【问题标题】:How do I find first event date for each user?如何找到每个用户的第一个活动日期?
【发布时间】:2016-03-12 14:17:59
【问题描述】:

我有一个事件表,其中存储了用户的事件,我想获取用户的事件数,并在结果中包含第一个事件日期,以便我可以查看一段时间内的数据。

一个示例表称为“事件”,它有 2 列

user_id VARCHAR(50) 
event_name VARCHAR(50)
event_time TIMESTAMP

user_ids 都是唯一的,事件名称可以是 login、send_message、like_post 之类的东西

例如,我如何查询每个用户发送的消息总数以及他们首次登录的时间,即 user_id 的首次登录的 event_time?

【问题讨论】:

标签: mysql postgresql


【解决方案1】:

如果您使用的是 Postgres 9.4 或更高版本,则可以使用 FILTER 子句来限制进入聚合的内容:

SELECT  user_id, 
        COUNT(event_time) FILTER (WHERE event_name = 'sent_message') AS messages_count,
        MIN(event_time) FILTER (WHERE event_name = 'login') AS first_login
FROM    events
GROUP BY user_id

否则你可以使用CASE,但是更冗长:

SELECT  user_id,
        COUNT(CASE WHEN event_name = 'sent_message' THEN 1 ELSE NULL END) AS messages_count,
        MIN(CASE WHEN event_name = 'login' THEN event_time ELSE NULL END) AS first_login
FROM    events
GROUP BY user_id

【讨论】:

    【解决方案2】:

    GROUP BYaggregate functions 是你的朋友。每个用户发送的消息总数:

    SELECT user_id, COUNT(event_time) 
    FROM table
    WHERE event_name = 'sent_message'
    GROUP BY user_id
    

    首次登录:

    SELECT user_id, MIN(event_time) 
    FROM table
    WHERE event_name = 'login'
    GROUP BY user_id
    

    【讨论】:

      猜你喜欢
      • 2021-12-09
      • 1970-01-01
      • 2020-06-22
      • 1970-01-01
      • 2022-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多