You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL如何编写按指定条件限流结果的查询:按用户分组最多返回最近7天两类任务各1条

解答

你完全可以直接通过PostgreSQL查询实现该需求,不需要额外通过JPA做业务逻辑裁剪,借助PostgreSQL内置的窗口函数即可高效完成。

实现思路

  1. 先过滤出过去7天内完成的所有任务记录
  2. 以user_id + task_type为分组维度,对同组内的任务按完成时间倒序排名
  3. 取每个分组内排名第一的记录,就是对应任务类型下用户最新完成的任务

参考查询语句

WITH ranked_tasks AS (
    SELECT 
        user_id,
        completed_date,
        task_type,
        task_id,
        ROW_NUMBER() OVER (
            PARTITION BY user_id, task_type 
            ORDER BY TO_DATE(completed_date, 'MM/DD/YYYY') DESC
        ) AS rank_num
    FROM tasks_table
    WHERE TO_DATE(completed_date, 'MM/DD/YYYY') >= CURRENT_DATE - INTERVAL '7 days'
)
SELECT user_id, completed_date, task_type, task_id
FROM ranked_tasks
WHERE rank_num = 1
ORDER BY user_id, task_type;

补充说明

  • 如果你的completed_date字段本身就是DATE/TIMESTAMP类型,不需要加TO_DATE转换,直接用字段本身做排序和时间过滤即可
  • 该查询自动适配仅完成单一类型任务的用户,只会返回该用户存在的任务类型对应的最新记录,符合你提到的边界场景
  • 若要进一步优化性能,可以给(user_id, task_type, completed_date DESC)创建联合索引

内容的提问来源于stack exchange,提问作者Aarth Thakore

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 09:36:03