如何 select 在 SQL 中的一列上划分不同的 6 组随机行

How to select distinct sets of 6 randomised rows partitioned on one column in SQL

我有一个简单的结果集,它为我提供了一个用户 ID 和一个来自 table 的操作员,其中包含其他列,其中一列是基于已发生的 activity 的 GUID对于那个用户。我添加了一个行号并由运算符进行分区以获得类似的结果(但比此示例更广泛);

UserId    Operator        RowNumber
513       J. Smith        12
513       J. Smith        56
513       J. Smith        25
513       J. Smith        45
513       J. Smith        11
513       J. Smith        58
513       J. Smith        22
513       J. Smith        17
513       J. Smith        29
501       S. Jones        33
501       S. Jones        21
501       S. Jones        09
501       S. Jones        15
501       S. Jones        39
501       S. Jones        26
501       S. Jones        31
501       S. Jones        28
501       S. Jones        37

想象一下每个运算符的行数加倍和大约 20 个不同的运算符名称。

我希望能够 return 在同一结果集中每个操作员随机生成 6 行。通过将我的原始查询包含在子查询中并从中选择具有行号和分区的前 6 个并在另一端使用 ORDER BY newid() ,我一次获得了一个操作员的随机行.我只是不知道如何一次为每个用户获取 6 个随机行(基于我给它的行号)。

诀窍是在 ROW_NUMBER 声明中使用 order by 子句:

   ;WITH CTE AS (
    SELECT USERID, OPERATOR
    , ROW_NUMBER() OVER(
        PARTITION BY OPERATOR 
            ORDER BY NEWID()) AS RN
    FROM [TABLE])
    SELECT *
    FROM CTE
    WHERE RN <= 6