PostgreSQL:如何获取多Job下均衡分布的指定状态任务?
解决方案
可以使用PostgreSQL的窗口函数ROW_NUMBER()实现按job分组取指定条数的需求,具体SQL语句如下:
SELECT job, task, status FROM ( SELECT job, task, status, ROW_NUMBER() OVER (PARTITION BY job ORDER BY task) AS rn FROM your_table_name WHERE status = 's1' AND job IN ('j1', 'j2', 'j3') ) AS sub WHERE rn <= 2 ORDER BY job, rn;
语句说明:
- 内层子查询:通过
PARTITION BY job将数据按job分组,ROW_NUMBER()为每个分组内的记录生成序号,ORDER BY task用于确定分组内记录的排序规则(可根据实际需求替换为创建时间等其他字段)。 - 外层查询:筛选每个分组内序号≤2的记录,确保每个job返回2条数据。
- 最后的
ORDER BY job, rn让结果按job分组展示,每组内记录按序号排序,满足均衡展示的要求。
若某job的s1状态记录不足2条,该语句会返回该job下所有符合条件的记录,最终总条数会少于6条。如果需要严格返回6条(允许某job不足时用其他job补充),可调整逻辑,但上述语句已满足各job均衡返回2条的核心需求。
内容的提问来源于stack exchange,提问作者Ram
相关产品推荐
相关产品推荐

