在我的表中trips
,我有两列:created_at
和user_id
独特的用户进行许多不同的旅行。我的目标是计算每年每月每个s独特的第一次旅行user_id
。我知道在这种情况下min()
应该应用该功能。
在之前的查询中,汇总了每年每月的所有唯一用户:
SELECT to_char(created_at, 'YYYY-MM') as yyyymm, COUNT(DISTINCT user_id)
FROM trips
GROUP BY yyyymm
ORDER BY yyyymm;
上面的查询应该在哪里min()
集成?换句话说,我只需要计算每月第一次出现的唯一用户 ID,而不是计算每个月的所有唯一用户 ID。
示例输入如下所示:
> routes
user_id created_at
1 1 2015-08-07 07:18:21
2 2 2015-05-06 20:43:52
3 3 2015-05-06 20:53:54
4 1 2015-03-30 20:09:07
5 2 2015-10-01 18:28:32
6 3 2015-08-07 07:29:29
7 1 2015-08-28 13:45:44
8 2 2015-08-07 07:37:31
9 3 2015-03-30 20:14:04
10 1 2015-08-07 07:08:50
输出将是:
count Y-m
1 0 2015-01
2 0 2015-02
3 2 2015-03
4 0 2015-04
5 1 2015-05
因为user_id
1 和 3的第一次出现是在三月,而user_id
2的第一次出现是在五月
您可以使用 2 个聚合级别来执行此操作。获取min
每个 user_id的时间,然后count
.
SELECT to_char(first_time, 'YYYY-MM'),count(*)
from (
SELECT user_id,MIN(created_at) as first_time
FROM trips
GROUP BY user_id
) t
GROUP BY to_char(first_time, 'YYYY-MM')
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句