postgresql - PostgreSQL - 是否可以编写一个 PostgreSQL 查询来限制它根据特定条件返回的结果数量?
问题描述
我知道我的标题措辞含糊不清,所以我会尝试澄清我的问题。
任务表
用户身份 | 完成日期 | 任务类型 | task_id |
---|---|---|---|
1 | 2021 年 11 月 14 日 | 一种 | 34 |
1 | 2021 年 11 月 13 日 | 乙 | 35 |
1 | 2021 年 11 月 11 日 | 一种 | 36 |
1 | 2021 年 11 月 9 日 | 乙 | 37 |
2 | 2021 年 11 月 12 日 | 一种 | 38 |
2 | 2021 年 11 月 2 日 | 一种 | 39 |
2 | 2021 年 11 月 14 日 | 乙 | 40 |
2 | 2021 年 10 月 14 日 | 乙 | 41 |
我正在使用的表有比这更多的字段,但是,这些是与问题相关的字段。任务类型可以是 A 或 B。
我目前正在尝试做的是获得一个结果集,其中每个 user_id 最多包含两个任务,一个任务类型 A 和一个任务类型 B,在过去 7 天内已完成。例如,查询的集合应生成以下结果集:
用户身份 | 完成日期 | 任务类型 | task_id |
---|---|---|---|
1 | 2021 年 11 月 14 日 | 一种 | 34 |
1 | 2021 年 11 月 13 日 | 乙 | 35 |
2 | 2021 年 11 月 12 日 | 一种 | 38 |
2 | 2021 年 11 月 14 日 | 乙 | 40 |
用户可能在该时间段内只完成了一种类型的任务,但可以保证任何给定用户在该时间段内至少完成了一项任务。我的问题是可以创建一个可以返回这样一个结果的查询,还是我必须查询一个更通用的结果,然后通过我的 JPA 中的逻辑修剪集合?
解决方案
要选择从现在起过去 7 天内给定 user_id 和 task_type 的最新任务(如果存在),您可以尝试以下操作:
SELECT DISTINCT ON (t.user_id, t.task_type) t.*
FROM tasks_table AS t
WHERE t.completed_date >= current_date - interval '7 days'
ORDER BY t.user_id, t.task_type, t.completed_date DESC
推荐阅读
- php - 使用 Foundation 的自定义 Wordpress 主题中的插件 jQuery 冲突
- neo4j - Cypher 将来自不同表的信息连接到一个表中
- .htaccess - htaccess - 使用过滤器更改文件目录
- laravel - 从 Vue 前端触发 Xdebug
- r - 'names' 属性 [4000] 必须与向量 [5] 的长度相同
- sanity - 在 CMS / Studio 中编辑引用的文档时,如何使用 Sanity.io 和 Gatsby 获得观看模式以刷新内容?
- plotly - 这是出现在我的绘图图中的趋势线吗?
- java - 如何返回 Singleton 访问 getInstance() 的次数?
- amazon-web-services - Istio Init 容器不适用于 Pod 安全策略
- r - 如何将数据框(不是光栅文件)的分辨率从 0.25 更改为 0.5?