2016-12-13 20 views
1

私は各患者のための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があり、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-to-beを参照してください。 -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; 
関連する問題