我试图为每年和使用的代码组合返回一个随机ID。数据库相当大,所以我试图获得一个随机样本进行测试,并需要确保每年和代码都有代表性。
一个公平的例子是假设每个组合都有100多个ID,但年份和代码是有限的。我希望得到一个看起来像下面的结果
YEAR | 代码 | ID|
---|---|---|
2015 | CODE_A | -今年的随机ID/代码组合 |
2015 | CODE_B | -今年的随机ID/代码组合 |
2015 | CODE_C | -今年的随机ID/代码组合 |
2015 | CODE_D | -今年的随机ID/代码组合 |
2015 | CODE_E | -今年的随机ID/代码组合 |
2016 | CODE_A | -今年的随机ID/代码组合 |
2016 | CODE_B | -今年的随机ID/代码组合 |
2016 | CODE_C | -今年的随机ID/代码组合 |
2016 | CODE_D | -今年的随机ID/代码组合 |
2016 | CODE_E | -今年的随机ID/代码组合 |
您可以使用row_number()
:
select t1.*
from (select t1.*,
row_number() over (partition by year, code order by dbms_random.value) as seqnum
from table1 t1
) t1
where seqnum = 1;
如果每个组合需要一行以上,只需使用seqnum <= <n>
即可。