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