1

我需要每年从 Oracle 10g 中的这张表中每月随机抽取 200 行:

Documents
--------------------------------------
Doc_ID     Date
95687      25-AUG-12
99283      21-SEP-12
87654      10-AUG-12
97111      14-SEP-12

我已经看到了该SAMPLE()功能,但不确定如何执行标准的其他部分。

4

1 回答 1

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 以获得真正随机的排序顺序。
了解更多。

于 2013-06-18T08:35:29.970 回答