2

SQL Server 2005には、病院に出入りする患者を格納するテーブルがあります。

テーブルデータストアは、患者の氏名、入院日、退院日、および入院の原因です。

私が必要としているのは、同じ原因で退院し、72時間以内に再入院した患者の数を表示するためのクエリです。

テーブル構造は次のとおりです。

CREATE TABLE hospital(
     patient   varchar(50),    
     in        datetime, 
     out       datetime, 
     reason_id int
 );

これはクエリです:

SELECT DISTINCT H1.PATIENT 
FROM HOSPITAL H1 
   INNER JOIN (SELECT * FROM HOSPITAL) H2 ON DATEDIFF(HOUR,H1.IN,H2.OUT) < 72
4

3 に答える 3

4
select distinct h1.patient
from   Hospital h1 join Hospital h2 on h1.patient = h2.patient
where  h1.[in] < h2.[in]
and    h2.[in] < dateadd(hour, 72, h1.[out])
and    h1.reason_id = h2.reason_id
于 2013-02-04T18:48:49.887 に答える
0

一般的に、あなたは彼らが少なくとも72時間許可されたレコードを選択しますよね?そうしてください。

SELECT Patient FROM 
(
SELECT Patient, DATEDIFF ("HH", In,Out)HOURDIFF FROM hospital
)temp 
WHERE HOURDIFF > 72

患者が再入院したときのreason_idフィールドが必要になり、それをWhere句に追加すると、さらにフィルタリングして、同じ入院および再入院の理由IDを取得できます。

于 2013-02-04T19:29:42.860 に答える
0

実際に72時間以内に次の入場を確認したい場合は、を使用するのが最善の策lagです。。。SQL Server 2012を使用していると仮定します。それ以外の場合、このクエリは同じことを行います。

さて、答えを説明します。相関サブクエリを使用して、次の理由と次回を取得できます。次に、where条件を満たすための条項:

where nextIn <= DATEADD(hh, 72, out) and
      nextReason = reason  

[回答のアップロードに問題があります]

于 2013-02-04T19:56:31.307 に答える