PostgreSQL中如何为每个案件处理者随机选取4个已完成案件?
为每个案件处理者随机选取4个案件的PostgreSQL实现方案
当然可以实现,不用逐个指定案件处理者,借助PostgreSQL的窗口函数就能一次性完成需求,为每个处理者随机选取最多4个已完成案件。
完整SQL语句
WITH ranked_cases AS ( SELECT a.case_id, a.case_handler, a.case_status, -- 按案件处理者分组,组内随机排序并生成唯一行号 ROW_NUMBER() OVER (PARTITION BY a.case_handler ORDER BY RANDOM()) AS rn FROM casemanagement.cases a WHERE a.case_status = 'Completed' -- 替换为你的实际日期字段和目标月份,示例为2024年5月 AND DATE_TRUNC('month', a.case_processed_date) = '2024-05-01' ) SELECT case_id, case_handler, case_status FROM ranked_cases WHERE rn <= 4 ORDER BY case_handler, rn;
逻辑说明
- 分组与随机排序:通过
PARTITION BY a.case_handler将数据按案件处理者分组,每组内用ORDER BY RANDOM()实现随机排序,再用ROW_NUMBER()为每组内的案件生成从1开始的行号。 - 筛选结果:最后筛选行号
rn <= 4的记录,即可得到每个处理者最多4个随机案件;如果某个处理者的已完成案件不足4个,会返回他所有的已完成案件。 - 月份过滤:语句中保留了指定月份的过滤条件,你需要将
case_processed_date替换为表中存储案件处理时间的实际字段,'2024-05-01'替换为目标月份的第一天(比如2024年6月就写'2024-06-01')。
内容的提问来源于stack exchange,提问作者NiknotNathanoj
相关产品推荐
相关产品推荐

