Sql server SQL每次调用都会获得不同的随机数据
需要帮助,SQL能做到吗 我有一个有100行的表,我需要从表中随机调用10行。 SQL是否可以在每次查询调用时提供不同的随机数据,而不是之前选择的行Sql server SQL每次调用都会获得不同的随机数据,sql-server,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 我仍在搜
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
我仍在搜索,但不知道如何搜索,最后一个选项是每次选择都会更新行,以便在下一次调用中未选中
SELECT TOP 10 [your select list]
FROM [your table]
ORDER BY NEWID()
应该给你10个“随机”行每次调用。
如果您需要100%确保这些行以前未被选中,唯一的方法是标记它们,以便您可以将它们排除在where中或从表中删除它们
编辑以扩展标记方法:用于标记为已提取的伪代码可能如下所示:
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
使用此脚本,您只需声明正在执行的运行,每次运行都会给出相同的行,您只需更改@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
你能像正常的选择输出一样输出10意味着10个数据吗?如果我有100个数据,那么我必须创建100个值?嗯,您的行已经在您的表中了。此语法仅选取10个值。您只需要用表替换@t,用主键列替换id。如果你准备得更好,包括你的表,我本来可以发布一个更好的答案