如何在PostgreSQL中检索用户首次回答后一周内的行数据?
筛选用户首次回答一周内的所有记录
现有表t_answer,结构及数据如下:
| user_id | created_at | answer |
|---|---|---|
| 1 | 2023-01-01 | 1a |
| 1 | 2023-01-02 | 1b |
| 1 | 2023-01-11 | 1c |
| 2 | 2023-02-05 | 2a |
| 2 | 2023-02-20 | 2a |
需要检索每个用户首次回答的created_at日期起一周时间间隔内的行数据,期望结果如下:
| user_id | created_at | answer |
|---|---|---|
| 1 | 2023-01-01 | 1a |
| 1 | 2023-01-02 | 1b |
| 2 | 2023-02-05 | 2a |
对应的PostgreSQL查询语句
SELECT user_id, created_at, answer FROM ( SELECT user_id, created_at, answer, MIN(created_at) OVER (PARTITION BY user_id) AS first_answer_date FROM t_answer ) AS sub WHERE created_at <= first_answer_date + INTERVAL '1 week';
语句说明
- 子查询中使用窗口函数
MIN(created_at) OVER (PARTITION BY user_id),按user_id分组后计算每个用户的首次回答日期,命名为first_answer_date。 - 外层查询筛选出
created_at小于等于first_answer_date加一周的记录,即保留该用户首次回答一周内的所有数据。
内容的提问来源于stack exchange,提问作者Selcuk
相关产品推荐
相关产品推荐

