2015-01-02 27 views
1

我正在使用oracle的醫學數據庫,我試圖找到隨機匹配的樣本。我爲所有患者創建了一張桌子,然後爲患有我正在尋找疾病的患者製作一張桌子。現在我想知道是否有可能將3個隨機選擇的患者恰好匹配到我的目標組(因此每個來自目標組的患者從所有患者的表中隨機選擇3個患者)根據性別和出生年份進行比較。在oracle中指定相等行數

SELECT A.PATIENTID 
FROM ALLPATIENTS A, 
     DIAGNOSES B 
WHERE A.YEAROFBIRTH = B.YEAROFBIRTH 
     AND A.GENDER = B.GENDER 
     AND A.PATIENTID NOT IN (SELECT PATIENTID 
           FROM DIAGNOSES); 

我的查詢顯示了所有在診斷組中有匹配的患者。這意味着來自具有例如更常見的出生年的診斷組的患者是過多的。這就是爲什麼我只需要來自我的診斷組的每位患者3個樣本。我希望你能得到什麼即時通訊的想法談論

非常感謝

+0

最後的情況讓我很困惑,你是什麼意思與「A.PATIENTID NOT IN(從診斷選擇PATIENTID)」? – jarlh

+0

@jarlh。 。 。他/她意味着治療組中的患者(診斷)不能在任何隊列中。這就是「診斷」與「所有病人」是分開的,但「所有病人」都有。 –

+0

感謝您的解釋! (我想在新年慶祝之後我仍然很累......) – jarlh

回答

3

您可以通過在你的分析使用權重解決問題。但是,這不是你的問題。這裏是一個獲得三個隨機選擇的行的方法:

select * 
from (select d.PATIENTID, p.PATIENTID, 
      ROW_NUMBER() OVER (PARTITION BY d.PATIENTID ORDER BY dbms_random.value) as seqnum 
     from ALLPATIENTS p join 
      DIAGNOSES d 
     where p.YEAROFBIRTH = d.YEAROFBIRTH AND 
      p.GENDER = d.GENDER AND 
      p.PATIENTID NOT IN (select d2.PATIENTID from DIAGNOSES d2) 
    ) dp 
where seqnum <= 3; 

這枚舉所有匹配的行,然後隨機選擇三個。注意:這是的替代品,因此患者可以出現在多個隊列中。 沒有更換更具挑戰性,但可能。