如何 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
我有一个简单的结果集,它为我提供了一个用户 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