You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

三视图关联查询需求:含特定筛选与最大评估日期取值

构建符合需求的关联查询

我来帮你写出满足需求的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:39:30