PL / SQL,用于获取一年中每个月的样本行

时间:2013-06-18 08:23:47

标签: oracle plsql

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

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

我见过SAMPLE()函数但不知道如何处理标准的其他部分。

1 个答案:

答案 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.