Sql,如何在24小时内获取数据差异

时间:2016-01-20 03:20:13

标签: sql oracle date-arithmetic

Select p.uhid,p.inpatientno,dateof admission 
from adt.inpatientmaster p 
where p.uhid='apd1' and status <>0 

此处uhid是唯一的。我想检查患者是否在24小时内被录取,如果患者再次被录取,那么uhid仍然相同,但inpatientno总是会改变。

例如:

Registraionno  inpatientno  dateofadmission
Apd1           xy1           18/01/15
Ap1            ab2            19/01/15

2 个答案:

答案 0 :(得分:0)

我们可以对Oracle日期进行算术运算。所以昨天是sysdate - 1

您需要两次查询表格。一旦找到患者记录,一旦找到以前的任何匹配。使用自联接来实现此目的:

select p1.uhid,
       p1.inpatientno as current_inpatientno,
       p1.dateofadmission as current_dateofadmission
       p2.inpatientno as previous_inpatientno,
       p2.dateofadmission as previous_dateofadmission
from adt.inpatientmaster p1 
     join adt.inpatientmaster p2
          on p2.uhid = p1.uhid
where p1.uhid='apd1' 
and p1.status <> 0 
and p2.dateofadmission >= p1.dateofadmission-1
and p2.inpatientno != p1.inpatientno
/

您可能还需要限制p2.status <> 0:不确定您的业务规则是什么。

此查询将为每个匹配返回一行。如果在相同的24小时内有多个录取,则每个组合的结果集将有一行。

答案 1 :(得分:-1)

SELECT p.uhid,
       p.inpatientno,
       p.dateofadmission
FROM adt.inpatientmaster p
WHERE p.status<>0
  AND p.dateofadmission <= p.dateofadmission +1
  AND p.uhid='APD1'