Sql按日期获取表中的最新行 - 双重选择vs order by

问题描述

一个查询,该查询使用双重选择(使用最大选择)来获取具有相同“患者集ID”的多行中最新“calculation_time”列的行。如果有多行具有相同的 'patient_set_id',则应仅检索具有最新 'calculation_time' 的行。计算时间是一个日期。 到目前为止,我已经尝试过这个,但我不确定是否有更好的方法,也许使用 ORDER BY。但我对 sql 很陌生,需要知道哪一个是最快和更合适的?

SELECT median from diagnostic_risk_stats WHERE 
      calculation_time=(SELECT MAX(calculation_time) FROM diagnostic_risk_stats WHERE 
      patient_set_id = UNHEX(REPLACE('5a9dbfca-74d6-471a-af27-31beb4b53bb2',"-","")));

enter image description here

解决方法

您可以按如下方式使用 not exists

SELECT median 
 from diagnostic_risk_stats t
 WHERE not exists
       (Select 1 from diagnostic_risk_stats tt
         Where t.patient_set_id = tt.patient_set_id
           And tt.calculation_time > t.calculation_time)
  And t.patient_set_id = UNHEX(REPLACE('5a9dbfca-74d6-471a-af27-31beb4b53bb2',"-",""));