如何基于另一列结果查询每行值?SQL客户提案优先级查询问题
解决方案
你需要调整ROW_NUMBER()的排序逻辑,先按提案状态的优先级排序,再按日期倒序,这样就能优先获取最新的已批准提案,无批准提案时取最新驳回的。
完整SQL示例:
WITH ranked_proposals AS ( SELECT id, result, date, ROW_NUMBER() OVER ( PARTITION BY id ORDER BY CASE WHEN result = 'Approved' THEN 0 ELSE 1 END, date DESC ) AS rn FROM proposals WHERE date BETWEEN '2024-01-01' AND '2024-01-31' -- 替换为你的指定时间区间 ) SELECT id, result, date FROM ranked_proposals WHERE rn = 1;
逻辑说明
- 用
CASE表达式给Approved状态赋予更高优先级(0比1靠前),确保已批准提案排在同客户所有提案的前面; - 同一状态下按
date降序排列,保证最新的提案排在首位; - 最后筛选每个客户分组中排名第一(
rn=1)的记录,就是你需要的结果。
内容的提问来源于stack exchange,提问作者Cesar Pereira
相关产品推荐
相关产品推荐

