我有一个数据库表,其中包含每个患者的一个或多个条目。这些包含免费文本和有关测试请求的其他信息。查询患者将返回例如:

TestID      PatientID   RequestMade             FreeText
1           23           13/12/2015 11:00:00    Feeling breathless
1125        23           07/04/2016 09:31:15    Unexplained fractures
2556        23           04/12/2016 16:20:21    Check liver function – on statins


查看测试结果时,我必须提取与测试有关的请求信息,这将是测试之前的最后一个信息。结果具有TestDate,因此TestDate为'13 / 04/2016 14:21:30'时应显示请求'07 / 04/2016 09:31:15'。我不确定如何高效地编写代码,因为返回患者的每个条目并在每个条目上进行日期比较似乎不是解决它的最佳方法。

最佳答案

如果您想对一个患者进行一项测试,然后再进行另一项测试,而您要查找的测试仅出现一次,那么您可以使用单个查询执行此操作,如下所示:

select t.*
from tests t
where t.patientid = 23 and
      t.requestmade < (select t2.requestmade
                       from tests t2
                       where t2.patientid = t.patientid and
                             t2.testid = ?
                      )
order by t.requestmade desc
limit 1;

10-04 10:34