三视图关联查询需求:含特定筛选与最大评估日期取值
构建符合需求的关联查询
我来帮你写出满足需求的SQL查询,核心思路是先筛选出每个PatientID对应的最新(最大AssessmentDate)记录,再关联第二个视图获取对应的描述信息。
方法一:使用窗口函数(推荐,灵活处理同日期多记录的情况)
WITH latest_assessments AS ( SELECT *, ROW_NUMBER() OVER (PARTITION BY PatientID ORDER BY AssessmentDate DESC) AS rn FROM view_ods_assessment WHERE stdAssessID = '你的特定ID值' -- 替换成你需要的目标stdAssessID ) SELECT la.*, b.Description FROM latest_assessments la LEFT JOIN view_ods_std_assessment b ON la.stdAssessID = b.stdAssessID WHERE la.rn = 1;
代码解释
- CTE部分:用
ROW_NUMBER()窗口函数给每个PatientID的记录按AssessmentDate倒序编号,编号为1的就是该患者的最新评估记录,同时提前过滤出你指定的stdAssessID。 - 关联查询:将筛选后的最新记录和视图b关联,通过
stdAssessID匹配获取对应的Description字段;用LEFT JOIN可以保证即使视图b中没有对应记录,视图a的内容也能完整保留(如果需要严格匹配仅保留两边都存在的记录,可以换成INNER JOIN)。
方法二:使用子查询获取最大日期
如果你的场景中每个PatientID+stdAssessID组合只会有一条最新记录,也可以用这种更简洁的写法:
SELECT a.*, b.Description FROM view_ods_assessment a LEFT JOIN view_ods_std_assessment b ON a.stdAssessID = b.stdAssessID WHERE a.stdAssessID = '你的特定ID值' AND (a.PatientID, a.AssessmentDate) IN ( SELECT PatientID, MAX(AssessmentDate) FROM view_ods_assessment WHERE stdAssessID = '你的特定ID值' GROUP BY PatientID );
这种方式通过子查询先找出每个患者的最新评估日期,再匹配原表中的对应记录,同样能精准满足你的需求。
内容的提问来源于stack exchange,提问作者Amanda
相关产品推荐
相关产品推荐

