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

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表

PatIDPatInserted
1,626
216/02/2021

Test表

TesIDTesPatIDFKTesInserted
13031,62625/10/1201 15:04:34
8216/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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 08:05:25