在我的表trips
中,我有两列:created_at
和user_id
独特的用户需要多次旅行。我的目标是计算每年每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的第一次出现是在3月份,而user_id
2的第一次出现是在5月份
答案 0 :(得分:4)
您可以使用2级聚合执行此操作。获取每个user_id的min
时间,然后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')