我需要每年从Oracle 10g中的这个表中每月随机抽取200行:
Documents
--------------------------------------
Doc_ID Date
95687 25-AUG-12
99283 21-SEP-12
87654 10-AUG-12
97111 14-SEP-12
我见过SAMPLE()
函数但不知道如何处理标准的其他部分。
答案 0 :(得分:4)
也许是这样的:
select doc_id
, date
from ( select doc_id
, date
, row_number() over (partition by trunc(date, 'MM')
order by dbms_randon.value ) as rn
from your_table )
where rn <= 200
order by date, doc_id ;
分析ROW_NUMBER()函数为按月分组的每条记录生成一个数字(通过使用'MM'
掩码截断日期来实现)。按DBMS_RANDOM排序将随机化排序顺序。请记住在运行查询之前初始化DBMS_RANDOM以获得真正随机的排序顺序
Find out more.