3个字段的关系

Relationship of 3 fields

我有 2 个 table:

Table:患者更新

Table: 文本大师

我需要最终结果:

最终结果是某医院变性手术科所有患者的当前状态,但患者姓名的标题是从TextMaster中选取的table。

由此SQL:

SELECT DISTINCT "PatientID",                    
  FIRST_VALUE("TextSource") 
    OVER (PARTITION BY "PatientID" ORDER BY CASE WHEN "TextSource" IS NOT NULL THEN "EffectiveDate" END DESC) "TextSource",
  FIRST_VALUE("TextGroup") 
    OVER (PARTITION BY "PatientID" ORDER BY CASE WHEN "TextGroup" IS NOT NULL THEN "EffectiveDate" END DESC) "TextGroup",
  FIRST_VALUE("TextIndex") 
    OVER (PARTITION BY "PatientID" ORDER BY CASE WHEN "TextIndex" IS NOT NULL THEN "EffectiveDate" END DESC) "TextIndex",
  FIRST_VALUE("FirstName") 
    OVER (PARTITION BY "PatientID" ORDER BY CASE WHEN "FirstName" IS NOT NULL THEN "EffectiveDate" END DESC) "FirstName",
  FIRST_VALUE("LastName") 
    OVER (PARTITION BY "PatientID" ORDER BY CASE WHEN "LastName" IS NOT NULL THEN "EffectiveDate" END DESC) "LastName"
FROM "PatientsUpdates";

我得到了这样的查询结果:

你能教我正确的 SQL 将 TextSource、TextGroup 和 TextIndex 替换为 TextDetail 或比上面显示的更好 SQL 吗?

如果 TextXXX"TextMaster" 的外键的一部分,那么对于单个行,它们要么全部为空,要么一起填充。在这种情况下,您可以简单地从 left join"TextMaster" 来获取信息。

SELECT DISTINCT pu."PatientID",
  FIRST_VALUE(tm."TextDetail") 
    OVER (PARTITION BY pu."PatientID" ORDER BY CASE WHEN "TextDetail" IS NOT NULL THEN "EffectiveDate" END DESC) "TextDetail",
  FIRST_VALUE(pu."FirstName") 
    OVER (PARTITION BY pu."PatientID" ORDER BY CASE WHEN pu."FirstName" IS NOT NULL THEN "EffectiveDate" END DESC) "FirstName",
  FIRST_VALUE(pu."LastName") 
    OVER (PARTITION BY pu."PatientID" ORDER BY CASE WHEN pu."LastName" IS NOT NULL THEN "EffectiveDate" END DESC) "LastName"
FROM "PatientsUpdates" pu
left join "TextMaster" tm
  using ("TextSource", "TextGroup", "TextIndex");

我使用 LEFT JOIN 而不是 INNER JOIN 因为您的问题中缺少信息什么可以为 null 或不为 null 以及在什么组合中,以避免意外删除提供的行必要的信息。但是,如果 "TextSource""TextGroup""TextIndex" 总是被填充,或者当 "FirstName" and/or "LastName" 也被填充时总是被填充,那么你可以请改用 INNER JOIN