0

我有一个简单的结果集,它从包含其他列的表中为我提供了一个用户 ID 和一个运算符,其中一个列是基于该用户发生的活动的 GUID。我添加了一个行号并由 Operator 进行分区以获得类似的内容(但比这个示例更广泛);

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 个不同的运算符名称。

我希望能够在同一结果集中为每个运算符返回 6 个随机行。我已经通过将我的原始查询包含在一个子查询中并从中选择前 6 个具有行号和分区并在另一端使用 ORDER BY newid() 来一次为一个运算符获取随机行. 我只是不知道如何一次为每个用户获取 6 个随机行(基于我给它的行号)。

4

1 回答 1

2

诀窍是在 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
于 2015-09-14T10:13:22.360 回答