私たちのシステムでは、入院患者が予定外の再入院のために病院に戻ることができる状況があります (これは再入院した病棟によって決まります)。データでは、前回の予約に関して特定の時間内に戻ってきた予定外の再入院を探しています。
だから私は持っているかもしれません:
ジョン・スミス 入院: 2013 年 9 月 20 日、2013 年 9 月 22 日に除隊
次に、予定外の入院の別の記録(特別病棟によって特定されます)は次のとおりです。
ジョン・スミス 入院: 2013 年 9 月 25 日、2013 年 9 月 28 日に除隊
だから私がする必要があるのは、1番目のレコードの退院日と2番目のレコードの入院日のデータの違いを確認することです.日数の違いが7日以内で、その人が予定外の入院病棟に行った場合、このデータを表示します.
すべてのデータを SQL Server に取り込み、すべてのレコードをステップ実行する 1 つのカーソルと、予定外の入院のみに関連するすべてのレコードをステップ実行する入れ子になったカーソルを作成するという考えに基づいています。
ネストされたメイン カーソルのデータを区別する方法は、入院した病棟とその入院 ID (一意) がメイン カーソル レコードと同じではなく、患者 ID が一致していることです。
これは、入院の同じ記録を比較するのではなく、同じ患者の他の入院記録を見て、それが 7 日以内かどうかを確認することを意味します。
私が使用したコードは以下のとおりです。私が抱えている主な問題は、カーソルで datediff 関数を使用することです。
DECLARE C_Admmissions CURSOR FOR
SELECT PatientID, [admission date], [discharge date], admissionid, [ward code]
FROM Admissions
open C_Admmissions
FETCH NEXT
FROM C_Admmissions into @PatientID, @admissiondate, @dischargedate, @admissionid, @wardcode
WHILE @@FETCH_STATUS = 0
BEGIN
DECLARE C_unscheduled_Admmissions CURSOR FOR
SELECT PatientID, [admission date], [discharge date], admissionid, [ward code]
FROM Admissions
WHERE [ward code] = 'unsch_adm'
AND admissionid != @admissionid
AND [PatientID] = @PatientID
open C_unscheduled_Admmissions
FETCH NEXT FROM C_unscheduled_Admmissions into @PatientID2, @admissiondate2, @dischargedate2, @admissionid2, @wardcode2
WHILE @@FETCH_STATUS = 0
BEGIN
begin
if DATEDIFF(DD, @dischargedate, @admissiondate2)<=7
begin
insert into unscheduled_admissions values(@PatientID, @admissiondate, @dischargedate, @admissionid, @wardcode)
end
begin
insert into unscheduled_admissions values(@PatientID2, @admissiondate2, @dischargedate2, @admissionid2, @wardcode2)
end
end
FETCH NEXT
FROM C_unscheduled_Admmissions into @PatientID2, @admissiondate2, @dischargedate2, @admissionid2, @wardcode2
END
CLOSE C_unscheduled_Admmissions
DEALLOCATE C_unscheduled_Admmissions
FETCH NEXT
FROM C_Admmissions into @CHI, @admissiondate, @dischargedate, @admissionid, @wardcode
END
CLOSE C_Admmissions
DEALLOCATE C_Admmissions
END
GO
入院と再入院の値をテーブルに挿入して、取得したデータを確認します。入院を取得する代わりに、再入院を次の行に表示し、7 日以内に (前回の退院日から) すべての入院を表示します。データの同じ行で、入院から退院までの期間が 7 日未満の再入院。
処理はライブ システム上ではなく、私が扱っている合計データ行は約 170,000 です。
私が期待しているのは、コードが与えるべきもののようですが、そうではなく、理由がわかりません。それはおそらく、私が見逃しているロジックで明らかなものです。
アンドリュー