我正在使用oracle在医疗数据库上工作,我试图找到随机匹配的样本。我已经为所有患者创建了一张桌子,然后在桌子上找到了患有我正在寻找的疾病的病人。现在我想知道是否有可能将3个随机选择的患者与我的目标组完全匹配(因此,来自目标组的每位患者从所有患者的表中随机选择3名患者)根据性别和出生年份进行比较。
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 :(得分: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;
这枚举所有匹配的行,然后随机选择三行。注意:这是 替换,因此患者可以出现在多个队列中。 没有替换更具挑战性,但可能。