HFSQL中用Test表最早记录填充Patient空PatInserted字段的SQL问题
解决HFSQL中按患者分组取最早测试日期的查询问题
我正在HFSQL数据库里更新日期字段:Patient表的PatInserted字段存在部分空白记录,需要将这些空白的PatInserted填充为关联Test表中对应患者的最早TesInserted记录,两表通过Test.TesPatIDFK与Patient.PatID关联。
刚接触SQL,目前写的SELECT查询只能返回单条全局最早记录,无法获取每个患者对应的最早TesInserted,现在需要修正SELECT部分。
原查询代码
SELECT DISTINCT Patient.PatID, Patient.PatInserted, Patient.PatSalutation, Test.TesPatIDFK, Test.TesInserted FROM Patient JOIN Test ON Patient.PatID = Test.TesPatIDFK WHERE Patient.PatID = Test.TesPatIDFK AND Test.TesInserted = (SELECT MIN(Test.TesInserted) FROM Test) AND Patient.PatInserted LIKE ''
基础表结构
Patient表
| PatID | PatInserted |
|---|---|
| 1,626 | |
| 2 | 16/02/2021 |
Test表
| TesID | TesPatIDFK | TesInserted |
|---|---|---|
| 1303 | 1,626 | 25/10/1201 15:04:34 |
| 8 | 2 | 16/02/2021 14:05:51 |
原查询结果
PatID | PatInserted | TesPatIDFK | TesInserted ______________________________________________________ 1,626 | | 1,626 | 25/10/1201 00:00:00
修正后的SELECT查询
SELECT p.PatID, p.PatInserted, p.PatSalutation, t_group.TesPatIDFK, t_group.earliest_tes_inserted FROM Patient p JOIN ( -- 按患者ID分组,获取每个患者的最早测试日期 SELECT TesPatIDFK, MIN(TesInserted) AS earliest_tes_inserted FROM Test GROUP BY TesPatIDFK ) t_group ON p.PatID = t_group.TesPatIDFK WHERE p.PatInserted = ''
说明
原查询的问题在于Test.TesInserted = (SELECT MIN(Test.TesInserted) FROM Test)取的是整个Test表的全局最小日期,而非每个患者自己的最早测试日期。通过子查询按TesPatIDFK分组并取MIN(TesInserted),就能精准获取每个患者对应的最早记录,再关联Patient表筛选出PatInserted空白的记录即可。
内容的提问来源于stack exchange,提问作者Ethan Collins
相关产品推荐
相关产品推荐

