一个查询,向我显示出于相同原因在72小时内出院和重新进入的患者数量

时间:2013-02-04 18:40:59

标签: sql sql-server tsql

在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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

一般情况下,你会选择他们被录取的记录至少72小时,对吧?这样做;

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

当患者被重新录取时,您将需要reason_id字段,并将其添加到Where子句,以便您可以进一步过滤以获得相同的录取和重新录取的原因ID。

答案 2 :(得分:0)

如果你真的想在72小时内查看 next ,那么最好的办法是使用lag。 。 。假设您有SQL Server 2012.否则,此查询会执行相同的操作。

好吧,我会描述答案。您可以使用相关子查询来获取下一个原因以及下次。然后是一个符合条件的where子句:

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

[麻烦上传回答]