如何选择SQL

时间:2015-09-14 10:06:13

标签: sql-server sql-server-2008 distinct row-number newid

我有一个简单的结果集,它从包含其他列的表中为我提供了用户ID和运算符,其中一列是基于该用户发生的活动的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个不同的运算符名称加倍。

我希望能够在同一结果集中为每个运算符返回6个随机行。通过在子查询中包含原始查询并从行号和分区中选择TOP 6并在另一端使用ORDER BY newid(),我一次为一个运算符获取随机行。我只是无法弄清楚如何同时为每个用户提供6个随机行(基于我给出的行号)。

1 个答案:

答案 0 :(得分: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