根据某些条件选择5个随机行

时间:2018-09-26 10:09:22

标签: sql sql-server random

我想从[Reviewer] ='G'的RawData中为每个Agent获得5个随机案例。如果座席没有5个符合此条件的个案,则采用所需数量的随机个案,其中[Reviewer] ='P'

  • John有5个案例,其中[Reviewer] ='G',所以这5个案例应该出现在结果中
  • Dan有2个案例,其中[Reviewer] ='G',因此应在结果中包括3个随机案例,其中[Reviewer] ='P'
  • Pat有6个案例,其中[Reviewer] ='P',所以结果中应该有5个随机案例
  • 玛丽有2个病例,其中[Reviewer] ='G',因此应在结果中包括3个随机病例,其中[Reviewer] ='P'
  • Joe有1个案例,其中[Reviewer] ='G',只有2个案例,其中[Reviewer] ='P',因此所有三个案例都应包含在结果中

原始数据和所需结果示例:

Raw Data & Example of desired results

1 个答案:

答案 0 :(得分:1)

您要先由审阅者对座席的记录进行排名,然后再对它们进行随机排名。为此,请使用ROW_NUMBER

select [Date], agent, [Case], accuracy, reviewer
from
(
  select
    [Date], agent, [Case], accuracy, reviewer,
    row_number() over (partition by agent order by reviewer, checksum(newid())) as rn
  from mytable
) ranked
where rn <= 5
order by agent, reviewer;