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 回答