oracle中指定相等行数

Specified number of equal rows in oracle

我正在使用 oracle 开发一个医学数据库,我试图在其中找到随机匹配的样本。我为所有患者创建了一个 table,然后为患有我正在寻找的疾病的患者创建了一个 table。现在我想知道是否有可能将 3 名随机选择的患者准确匹配到我的目标组(因此来自目标组的每个患者从 table 中随机选择 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 个样本。我希望你能明白我在说什么

非常感谢

您可以通过在分析中使用权重来解决问题。然而,这不是你的问题。这是获取三个随机选择的行的方法:

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;

这会枚举所有匹配的行,然后随机选择三个。注意:这是 with 替换,因此一名患者可以出现在多个队列中。 没有 替换更具挑战性,但有可能。