1

私は患者のデータベースを持っています。患者 ID を識別子として使用し、投薬とアクションの複数の Start_Date と Stop_Date を使用します。

私の問題はそれを照会する方法です

WHERE action = 1 and start_date BETWEEN '01/10/2012' and '01/10/2013'

and where action = 1 is their FIRST Start_date 

治療表:

Patient_ID
Start_Date Varchar
Stope_Date Varchar
Action  Varchar 

コード: 1 = 開始; 2 = 停止。3 = 変更

お気に入り:

 Patient_ID | Medication_Code |Action| Start_Date   | Stop_Date
 10001      | Med008          | 2     | 01/01/2010  | 10/08/2012
            | Med012          | 1     | 02/09/2013  |
            | Med088          | 1     | 22/07/2009  |
 10002      | Med003          | 2     | 01/01/2009  | 01/03/2011
            | Med012          | 1     | 02/03/2012  |
            | Med081          | 1     | 22/07/2013   
 10011      | Med018          | 2     | 11/02/2010  | 10/08/2012
            | Med011          | 1     | 12/09/2013  |
            | Med028          | 1     | 25/03/2013

患者には複数の start_date があることがわかります。次のようなものを使用する場合

where start_date between 01/01/2012 and 01/01/2013 and action = 1

action =1 and between 01/01/2012 and 01/01/2013彼らが持っている最初のStart_dateでなくても、すべてを教えてくれます。

したがって、この例では IF ITS A WORKING スクリプト

Select patient_ID, Start_Date, Action, Medication_code

from Patient

Where start_date EARLIEST 01/01/2012 and 01/01/2013 and action = 1

必要な出力:

10002  22/07/2013  1   Med081
10011  25/03/2013  1   Med028

よろしくお願いします... 質問をお待ちしています。

4

2 に答える 2

2
Select patient_ID
    , Start_Date
    , Action
    , Medication_code
from therapy t1
WHERE action = 1
     AND Startdate>=@from
     AND Startdate<@to+1
     AND Start_Date=(
                   SELECT MIN(t2.Startdate) 
                   from therapy t2 
                   where t1.patient_ID=t2.patient_ID 
                   and t1.Medication_code=t2.Medication_code)

やるべきです。

于 2013-10-22T11:42:46.537 に答える
2

必要な結果のためにグループ化する必要があります

Select patient_ID, MIN(Start_Date) earliestStartDate, MIN(Action) Action, Medication_code
from Patient
Where start_date EARLIEST 01/01/2012 and 01/01/2013 and action = 1
Group By Patient_id, Medication_code

このコードは、患者と薬を一緒にグループ化します

文字列を日時値に変換する別の例を作成しました

DECLARE @from datetime, @to datetime
SET @from = '2012-01-01'
SET @to = '2013-12-31'
SELECT patient_ID, CONVERT(datetime, Start_Date, 103), Medication_code, Action
FROM Patient Pat
INNER JOIN (
   SELECT   patient_ID id, MIN(CONVERT(datetime, Start_Date, 103)) date
   FROM  Patient
       WHERE CONVERT(datetime, Start_Date, 103) between @from and @to
       AND action = 1
   GROUP BY patient_ID) pat2 ON pat.patient_ID = pat2.id AND 
                      CONVERT(datetime, pat.Start_Date, 103) = pat2.date
LEFT JOIN (
   SELECT   patient_ID id, MIN(CONVERT(datetime, Start_Date, 103)) EarliestDate--, Medication_code--, MIN(Action) Action
   FROM  Patient
       WHERE CONVERT(datetime, Start_Date, 103) < @from
       AND action = 1
   GROUP BY patient_ID) pat3 ON 
        pat.patient_ID = pat3.id
WHERE EarliestDate IS NULL
ORDER BY CONVERT(datetime, Start_Date, 103)

このコードは、文字列 dd/MM/yyyy を datetime に変換するのに問題なく機能します。

于 2013-10-22T11:43:27.913 に答える