如何查找每个用户的第一个活动日期?

时间:2016-03-11 16:16:44

标签: mysql postgresql

我有一个事件表,用于存储用户的事件,我想获取用户的事件数量,并且在结果中也有第一个事件日期,以便我可以随时查看数据。

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

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

user_ids都是唯一的,事件名称可以是login,sent_message,likes_post

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:-1)

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