在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
答案 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
[麻烦上传回答]