需要帮助,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
我仍在搜索,但不知道如何,最后一个选项是每个选择对行进行更新,因此未在下次调用中选择
答案 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