如何在OBIEE分析中获取候选人的最新测试分数
解决方案:获取最新记录与OBIEE中候选人最新测试分数实现
一、通用场景:从列的数值列表中获取最新记录
要从一组对应多条记录的数值里拿到最新的那条,核心逻辑是基于「标识“新/旧”的字段」(比如日期、时间戳、自增ID),按分组维度筛选出每组的最大/最新值对应的记录。拆解下来分三步:
- 确定分组维度:比如按“候选人”“部门”这类需要单独统计的维度分组;
- 确定排序依据:用日期、时间戳这类能判断记录新旧的字段,通常越晚的时间对应越新的记录;
- 筛选目标:提取每组中排序最靠前(降序的第一条)的记录。
二、OBIEE分析中获取候选人最新测试分数的具体实现
针对你提到的候选人多次考试、只返回最新分数的场景,这里给出两种OBIEE中可行的实现方法,均基于逻辑SQL完成:
方法1:使用分析函数(推荐,简洁灵活)
OBIEE支持Oracle风格的分析函数,ROW_NUMBER()是处理这类分组取最新记录场景的最优工具。假设你的数据集包含Candidate_ID(候选人ID)、Test_Date(测试日期)、Test_Score(测试分数)三个核心字段,对应的逻辑SQL如下:
SELECT Candidate_ID, Test_Score, Test_Date FROM ( SELECT Candidate_ID, Test_Score, Test_Date, -- 按候选人分组,测试日期降序排序,为每条记录标注序号 ROW_NUMBER() OVER (PARTITION BY Candidate_ID ORDER BY Test_Date DESC) AS record_rank FROM Your_Test_Table -- 替换成你的实际表名/逻辑表 ) ranked_records WHERE record_rank = 1 -- 只保留每组的第一条(也就是最新的测试记录)
如果遇到同一个候选人同一天有多次测试的情况,可以额外添加排序字段(比如测试ID),确保取到真正的最新考试记录:
ROW_NUMBER() OVER (PARTITION BY Candidate_ID ORDER BY Test_Date DESC, Test_ID DESC) AS record_rank
方法2:子查询关联(适合不熟悉分析函数的场景)
先通过子查询获取每个候选人的最新测试日期,再关联原表拿到对应分数:
SELECT t1.Candidate_ID, t1.Test_Score, t1.Test_Date FROM Your_Test_Table t1 INNER JOIN ( -- 先统计每个候选人的最新测试日期 SELECT Candidate_ID, MAX(Test_Date) AS Latest_Test_Date FROM Your_Test_Table GROUP BY Candidate_ID ) t2 ON t1.Candidate_ID = t2.Candidate_ID AND t1.Test_Date = t2.Latest_Test_Date
⚠️ 注意:如果同一个候选人在同一天有多次测试,这个方法会返回多条记录。此时可以结合MAX(Test_Score)取当天的最高分,或者补充更多筛选条件:
SELECT t1.Candidate_ID, MAX(t1.Test_Score) AS Latest_Test_Score, t2.Latest_Test_Date FROM Your_Test_Table t1 INNER JOIN ( SELECT Candidate_ID, MAX(Test_Date) AS Latest_Test_Date FROM Your_Test_Table GROUP BY Candidate_ID ) t2 ON t1.Candidate_ID = t2.Candidate_ID AND t1.Test_Date = t2.Latest_Test_Date GROUP BY t1.Candidate_ID, t2.Latest_Test_Date
内容的提问来源于stack exchange,提问作者Sly
相关产品推荐
相关产品推荐

