私は3つ以上の連続した予定を逃したすべての人を検索しようとしています。私は、これを達成するためにウィンドウ関数を使うことができると信じていますが、私は立ち往生していて、何か助けを求めています。ここで TSQL - ウィンドウ機能/ランキング
は、私が探しています何のサンプルです:以下PATID = X001について 1/12,1/14,1/15 を逃すための基準を満たしており、PATID = X002基準を満たしています。PATID DEPT DATE STATUS
x001 A002 1/1/2016 Missed
x001 A002 1/5/2016 Complete
x001 A002 1/8/2016 Missed
x001 A002 1/10/2016 Complete
x001 A002 1/12/2016 Missed
x001 A002 1/14/2016 Missed
x001 A002 1/15/2016 Missed
x001 A002 1/19/2016 Complete
x002 A003 1/1/2016 Missed
x002 A003 1/5/2016 Complete
x002 A003 1/8/2016 Missed
x002 A003 1/10/2016 Complete
x002 A003 1/12/2016 Missed
x002 A003 1/14/2016 Complete
x002 A003 1/15/2016 Missed
x002 A003 1/19/2016 Complete
これまで私がこれまで行ってきたことです。
SELECT
PR.PATID
, PR.DEPT
, PR.DATE
, CASE WHEN PR.STATUS IN (3,4) THEN 'Cancel' WHEN PR.STATUS = 2 THEN 'COMPLETED' ELSE 'ERROR' END AS STATUS, ROW_NUMBER() OVER (PARTITION BY PR.PAT_ID,PR.DEPARTMENT_ID ORDER BY R.PAT_ID,PR.DEPARTMENT_ID,PR.CONTACT_DATE) AS RN -- Just numbers the rows
, COUNT(*) OVER (PARTITION BY PR.PAT_ID,PR.DEPARTMENT_ID, CASE WHEN PR.APPT_STATUS_C IN (3,4) AND PR.CANCEL_REASON_C <> 4 THEN 'Cancel' WHEN PR.APPT_STATUS_C = 2 THEN 'COMPLETED' ELSE 'ERROR' END) AS RNC -- Should have break at new statuses
FROM #PatsReturn AS PR
私は日付によって新しいステータスの変化で正しい休憩を割り当てる方法を把握したら、その後、私は識別するための方法を把握する必要があります(おそらく新しいフラグフィールドを??)3を逃したPATIDs +連続....
何か助けていただければ幸いです。
select distinct patid
from (select pr.*,
lead(status) over (partition by patid order by date) as status_1,
lead(status, 2) over (partition by patid order by date) as status_2
from #PatsReturn pr
) pr
where status = 'Missed' and status_1 = 'Missed' and status_2 = 'Missed';
あなたは各シーケンスに関する情報が必要な場合は、あなたが同様の予定のグループを識別することができます
おかげで、