Выберите 5 случайных строк на основе определенных критериев - PullRequest
0 голосов
/ 26 сентября 2018

Я хочу получить 5 случайных случаев для каждого агента из RawData, где [Reviewer] = 'G'.Если у агента нет 5 дел, которые соответствуют этому критерию, возьмите необходимое количество случайных случаев, где [Рецензент] = 'P'

  • У Джона есть 5 случаев, когда [Рецензент] = 'G', поэтомуэти 5 случаев должны появиться в результатах
  • У Дана есть 2 случая, когда [Reviewer] = 'G', поэтому 3 случайных случая, когда [Reviewer] = 'P' должны быть включены в результаты
  • Patимеет 6 случаев, когда [Reviewer] = 'P', поэтому в результатах должно быть 5 случайных случаев
  • Мэри имеет 2 случая, когда [Reviewer] = 'G', поэтому 3 случайных случая, где [Reviewer] = 'P'должны быть включены в результаты
  • У Джо есть 1 случай, когда [Reviewer] = 'G', и только 2 случая, когда [Reviewer] = 'P', поэтому все три случая должны быть включены в результаты

Исходные данные и пример желаемых результатов:

Raw Data & Example of desired results

1 Ответ

0 голосов
/ 26 сентября 2018

Вы хотите ранжировать записи агента сначала рецензентом, а затем случайным образом.Для этого используйте 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;
...