【问题标题】:Select 5 random rows based on certain criteria根据特定条件选择 5 个随机行
【发布时间】:2018-09-26 10:09:21
【问题描述】:

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

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

原始数据和预期结果示例:

【问题讨论】:

  • 欢迎来到stackoverflow。请花一分钟时间拨打tour,尤其是How to Ask。此外,样本数据最好以DDL + DML 的形式提供。请edit您的问题包括它,您当前的尝试和您想要的结果。更多详情,read this.
  • 你只有一个违反第二范式的表,没有别的吗?一些实际/简化的 DDL 会很有用。

标签: sql sql-server random


【解决方案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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-15
    • 1970-01-01
    • 2012-10-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多