2016-12-13 61 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;