2016-03-29 112 views
1

我有一張類似於以下內容的表。這是緊急護理中心的數據,與當病人被賦予一個房間ROOMED_DT是,和CHECKOUT_DT是病人被清除離開的時候了:跨行和兩組計算平均時間差

PAT_ID  ROOMED_DT    CHECKOUT_DT   ROOM_NUM 
1   11/12/2015 03:22PM  11/12/2015 06:30PM Room 4 
2   11/12/2015 07:40PM  11/12/2015 10:30PM Room 4 
3   11/12/2015 10:55PM  11/12/2015 11:30PM Room 4 
4   11/12/2015 09:45AM  11/12/2015 12:00PM Room 5 
5   11/12/2015 12:02PM  11/12/2015 01:30PM Room 5 
6   11/12/2015 02:25PM  11/12/2015 04:30PM Room 5 
7   11/13/2015 07:22AM  11/13/2015 08:04AM Room 2 
8   11/13/2015 09:40AM  11/13/2015 10:30AM Room 2 
9   11/13/2015 10:55AM  11/13/2015 11:55AM Room 2 
10   11/13/2015 12:45PM  11/13/2015 02:00PM Room 1 
11   11/13/2015 04:02PM  11/13/2015 05:30PM Room 1 
12   11/13/2015 05:25PM  11/13/2015 08:30PM Room 1 

我想計算的平均時間從前一位患者被清除離開(CHECKOUT_DT)到每個房間每天出現下一位患者(ROOMED_DT)的時間,因此結果看起來像這樣(爲了這個目的,我將平均數字提高了的視覺),與下一個病人在幾分鐘內的時間。

SERVICE_DT  TIME_TO_NEXT_PAT 
11/12/2015  65.7 
11/13/2015  72.4 

但我不知道如何解釋在多個患者和多個房間CHECKOUT_DT和ROOMED_DT之間的差異。有沒有人有任何想法?我正在使用Netezza。

回答

0

您可以使用lead分析函數來獲得這些結果。

這裏是查詢

SELECT SERVICE_DATE 
, AVG(MINUTES_BETWEEN) 
FROM (
     SELECT PAT_ID 
     , ROOMED_DT::DATE SERVICE_DATE 
     , ROOMED_DT 
     , CHECKOUT_DT 
     , ROOM_NUM 
     , LEAD(ROOMED_DT,1) OVER (PARTITION BY ROOM_NUM ORDER BY ROOMED_DT) NEXT_CHECKED_IN 
     , MINUTES_BETWEEN(NEXT_CHECKED_IN,CHECKOUT_DT) 
     FROM SAMPLE 
     ORDER BY 1 
) FOO 
WHERE MINUTES_BETWEEN IS NOT NULL 
GROUP BY 1; 

SERVICE_DATE | AVG 
--------------+----------- 
2015-11-12 | 38.000000 
2015-11-13 | 62.000000 
(2 rows)