我有一个简单的结果集,它从包含其他列的表中为我提供了用户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个随机行(基于我给出的行号)。
答案 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