2016-01-20 64 views
0
Select p.uhid,p.inpatientno,dateof admission 
from adt.inpatientmaster p 
where p.uhid='apd1' and status <>0 

這裏uhid是唯一的。我想檢查一個病人在24小時之內入院,如果病人再次入院,那麼uhid保持不變,但inpatientno總是改變。Sql,如何獲取24小時內的差異數據

例:

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

請更具描述性地說明表名稱和屬性,以便我們幫助您查詢 –

+0

您的問題尚不清楚。 –

+0

請提供樣本數據樣本輸出:即向我們顯示符合您所需條件的記錄和不符合條件的記錄。 – APC

回答

-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' 
+0

嗯,'p.dateofadmission <= p.dateofadmission + 1'總會是真的。 – APC

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小時內有幾次錄取,則每個組合的結果集都會有一行。