2016-11-21 89 views
0

我道歉,如果我不是措辭的問題正確的,這就是爲什麼我無法找到任何先前的問題/這個答案.....計數基於「爲」日期

我的具體情況可以概括爲:

我有一個表格,其中包含醫院系統中病人的牀位分配記錄。病人在牀上的位置標有日期,以及他們在那裏放置的原因。

Patient |Hospital |Bed |Reason |Date 
--------|---------|----|-------|-------- 
1234 |HOSP1 |111 |A  |1/1/2016 
5678 |HOSP1 |222 |A  |2/1/2016 
9012 |HOSP2 |333 |B  |3/1/2016 
3456 |HOSP3 |444 |C  |3/1/2016 
2345 |HOSP3 |555 |A  |3/1/2016 
7890 |HOSP1 |111 |D  |4/1/2016 

基於上述設定的非常小的樣本,我需要的「理由」的計數,每個醫院,給予「爲」日期。因此給予「爲」的2016年3月15日日期:

As of Date: 3/15/2016 
Hospital|Reason |Count 
--------|---------|----- 
HOSP1 |A  |2 
HOSP2 |B  |1 
HOSP3 |A  |1 
HOSP3 |C  |1 

但是當改變「爲」日期16年4月1日,我希望看到以下內容:

As of Date: 4/15/2016 
Hospital|Reason |Count 
--------|---------|----- 
HOSP1 |A  |1 
HOSP1 |D  |1 
HOSP2 |B  |1 
HOSP3 |A  |1 
HOSP3 |C  |1 

任何建議的最佳途徑來完成這個沒有融化我的CPU或服務器? (我的真實記錄集約爲3600行,可以追溯到15年)。而且我的最終目標是確定每個「醫院」的「理由」的年平均值,但我知道第一步是先確定這些初始計數(或者是?)。

+2

您只有1條記錄的日期爲4/1/2016或更大。爲什麼其他記錄顯示?有沒有「截止日期」或什麼的? – xQbert

+0

當您從3/15到4/15的日期增加時,爲什麼(HOSP1,原因A)的計數從2降到1? – DVT

+1

@xQbert我*認爲*的想法是,你必須看看日期*小於*等於2016年4月15日(或4/1/2016,這個問題同時使用),但它仍然沒有'對我來說沒有意義。結果表明,「1234 | HOSP1 | 111 | A | 1/1/2016」記錄不再計算在內,但我不清楚爲什麼它不應該被計數。是不是隻是在同一張牀上有新的記錄?這是否意味着牀每天都在使用 - 只有下一位患者才能清除牀位?我當然希望不是這樣。 – hvd

回答

3

你想要的是某個日期之前的最新記錄。這很容易使用窗口功能:

select hospital, reason, count(*) 
from (select t.*, 
      row_number() over (partition by hospital, bed order by date desc) as seqnum 
     from t 
     where date <= '2016-03-15' 
    ) t 
where seqnum = 1 
group by hospital, reason; 
+0

如果我正確地理解了這個問題(可疑),我想你可能想在外部查詢中添加一個WHERE seqnum = 1。感謝你的回答。 – DVT

+0

@DVT。 。 。謝謝。 –

+0

@GordonLinoff真棒,謝謝!!!!! – nicbjones