【发布时间】:2019-04-09 03:12:11
【问题描述】:
我在 PostgreSQL 10.5 中有一个表 Subscriptions:
id user_id starts_at ends_at
--------------------------------
1 233 02/04/19 03/03/19
2 233 03/04/19 04/03/19
3 296 02/09/19 03/08/19
4 126 02/01/19 02/28/19
5 126 03/01/19 03/31/19
6 922 02/22/19 03/22/19
我想计算每周有多少新订阅者。新订阅者是在该周之前没有订阅条目的任何用户 ID。
edit 我稍微修改了@fubar 解决方案以适应我喜欢的日期格式。我忘记在此处添加的一项说明是,我希望看到有 0 的几周。如何将generate_series 集成到下面的查询中,以便我还可以查看0 订阅者的周数?
SELECT TO_CHAR(date_trunc('week', s.starts_at), 'YYYY-MM-DD') as week, COUNT(*) AS count
FROM subscriptions s
LEFT JOIN subscriptions s1 ON s.user_id = s1.user_id AND s.starts_at > s1.starts_at
WHERE s1.id IS NULL
GROUP BY week
ORDER BY week desc
【问题讨论】:
-
DISTINCT 不是函数,跳过那些多余的括号,直接写
count(distinct s.id)让代码更清晰!
标签: sql postgresql