【发布时间】:2018-03-29 16:12:20
【问题描述】:
我有一个存储应用程序用户活动信息的表。
| username | day |
|----------|-----|
| u1 | 1 |
| u1 | 2 |
| u1 | 3 |
| u2 | 2 |
| u3 | 1 |
| u3 | 4 |
我希望能够获取有关每天唯一用户和最近用户的历史数据。
- 第 N 天的唯一用户是在第 0 天和第 N 天之间有任何活动的所有不同用户。
- 第 N 天的最近用户是在第 N-1 天或第 N 天有任何活动的所有不同用户。在实际应用中,这将在第 N-30 天和第 N 天之间。
我能够获取在每个特定日期活跃的用户列表,但我不确定如何汇总这些数据以获取唯一用户或最近用户。
SELECT
day,
array_agg(username) as day_users
FROM myTable
GROUP BY day
ORDER BY day;
| day | day_users |
|-----|-----------|
| 1 | u1, u3 |
| 2 | u1,u2 |
| 3 | u1 |
| 4 | u3 |
对于上面的示例数据,预期输出将是(不需要间距):
| day | unique_users | recent_users
|-----|--------------|-------------
| 1 | u1, u3 | u1, u3
| 2 | u1,u2,u3 | u1,u2,u3
| 3 | u1,u2,u3 | u1,u2
| 4 | u1,u2,u3 | u1, u3
相关 SQL Fiddle:http://sqlfiddle.com/#!17/b793f/1
【问题讨论】:
-
提示:使用“滞后”
-
请始终提供您的 Postgres 版本和显示数据类型和约束的表定义(
CREATE TABLE语句)。
标签: sql postgresql aggregate-functions