SQL每次调用都会得到不同的随机数据

时间:2015-03-05 10:22:47

标签: sql-server

需要帮助,SQL可以这样做吗?

我有一个包含100行的表,我需要从表中调用10个随机行。 SQL可以使每个查询调用给我不同的随机数据,但不能在

之前给出我选择的行
1st random query = get 10 random rows
2nd random query = get another 10 random rows different from the 1st call
.
.
.
10th random query = get the last 10 rows not chosen

我仍在搜索,但不知道如何,最后一个选项是每个选择对行进行更新,因此未在下次调用中选择

2 个答案:

答案 0 :(得分:0)

SELECT TOP 10 [your select list]
FROM [your table]
ORDER BY NEWID()

每次通话应该给你10个“随机”行。 如果您需要100%确定行以前未选中它们 - 唯一的方法是标记它们,以便将它们排除在哪里或从表中删除它们。

编辑以扩展标记方法:
用于标记为提取的伪代码可能如下所示:

DECLARE @tempList AS TABLE 

INSERT INTO @tempList
SELECT TOP 10 [your select list]
FROM [your table]
WHERE extracted = 0
ORDER BY NEWID()

UPDATE [your table]
SET extracted = 1
WHERE rows IN @tempList

SELECT * FROM @templist

答案 1 :(得分:0)

使用此脚本,您只需要声明正在执行的运行,它将始终为每次运行提供相同的行,您只需更改@run的值。结果似乎是随机的而不是实际上是随机的:

DECLARE @run INT = 2

DECLARE @t table(id int)
INSERT @t 

SELECT x.id*10 + y.id + 1
FROM (values(0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) x(id)
CROSS JOIN
(values(0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) y(id)

;WITH CTE as
(
  SELECT id, ntile(10) over (order by reverse(CHECKSUM(id, 'abc'))) rowgroup  FROM @t
)
SELECT id
FROM CTE
WHERE rowgroup = @run