2016-12-13 43 views
1

我有一个数据库表,其中包含每个患者的一个或多个条目。这些包含有关测试请求的免费文本和附加信息。查询上的患者可以例如回报: -SQL - 选择最近的前一个日期

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,所以'13/04/2016 14:21:30'的测试日期应该显示'07/04/2016 09:31:15'的请求。我不确定如何有效地对其进行编码,以便为患者返回每个条目,并且对每个条目进行日期比较似乎不是解决该问题的最佳方法。

+0

请编辑您的问题并显示您当前的查询。 –

+0

使用日期数据类型存储日期,并参见http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-tobe -a-very-simple-sql-query 然后回到我们身边。 – Strawberry

+0

您尚未考虑** SET **操作。我强烈建议你做出这种模式转变。 SQL是一种声明性语言。 (1)你的查询描述你想要的数据。 (2)RDBMS检索数据。 (3)如果你有正确的索引,它将尽可能高效。 –

回答

0

如果你想在另一个之前测试单个病人测试你正在寻找只出现一次一个测试,那么你就可以使用单个查询为做到这一点:

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;