固定大小随机样本基于当前查询

时间:2015-08-05 15:43:19

标签: sql oracle

我想基于我当前的查询随机抽样150个工作订单,我添加了一个SAMPLE(3),抽样3%。但每次我运行示例查询时,工作订单的数量都会发生变化。有没有办法可以说样品150个工单?

这是我目前的查询:

metricname timestamp value tag1=foo tag2=bar

1 个答案:

答案 0 :(得分:1)

您不能使用sample clause

执行此操作
  

此百分比表示在块采样的情况下每行或每个行的概率被选为样本的一部分。这并不意味着数据库将准确检索表的行的sample_percent。

要获得确切的数字,您可以使用带有分析函数的子查询添加到选择列表中,但是使用现有查询:

SELECT * -- list the columns to avoid the dummy RN appearing
FROM (
  SELECT  
    WORKORDER.WONUM,
    WORKORDER.PARENT,
    ...
    WORKORDER.REPORTEDBY,
    -- randomly ordered
    ROW_NUMBER() OVER (ORDER BY DBMS_RANDOM.VALUE) AS RN
  FROM WORKORDER
  ...
)
WHERE RN <= 150
ORDER BY WONUM;

这比仅使用sample更不方便,但更明确。从12c开始,您可以使用fetch clause,通过随机排序而不是您的工单号;但是您仍然需要一个子查询,然后按工单号排序生成的150行。