【发布时间】:2018-06-05 04:15:47
【问题描述】:
我的表用户具有以下值:
id | created_at
-------+---------------------
20127 | 2015-01-31 04:23:46
21468 | 2015-02-04 07:50:34
21571 | 2015-02-04 08:23:50
20730 | 2015-03-12 10:20:16
19955 | 2015-03-30 07:44:35
20148 | 2015-04-17 13:03:26
21552 | 2015-05-07 19:00:00
20145 | 2015-06-02 03:12:46
21467 | 2015-06-03 13:21:51
21074 | 2015-07-03 19:00:00
我想:
- 查找用户数随时间推移的累积总和(返回日期范围内每一天的用户数,而不仅仅是数据库中存在的天数)
- 能够按日期过滤总和,因此如果我将日期放在某行之后,则该行应包含在累积总和中(指定范围之前的所有内容都应包含在第一个总和中,它应该t 从指定范围开头的 0 开始计数)
- 以纪元格式返回按每天分组的结果
我正在尝试使用以下 SQL 实现此目的:
SELECT extract(epoch from created_at)::bigint,
sum(count(id)::integer) OVER (ORDER BY created_at)
FROM data_users
WHERE created_at IS NOT NULL
GROUP BY created_at
但它没有按预期工作,因为我无法在此处添加按日期过滤,而不从累积总和中排除记录。此外,它不考虑已错过的天数(用户不存在的天数)。
非常感谢任何帮助。
【问题讨论】:
-
只需使用子查询,并将过滤放在外部查询中。
-
@GordonLinoff 你能详细说明一下吗?
标签: sql postgresql