id | name
-------+-------------------------------------
209096 | Pharmacy
204200 | Eyecare Center
185718 | Duffy PC
214519 | Shopko
162225 | Edward Jones
7609 | Back In Action Chiropractic Center
我使用select id, name from customer order by random()
我只想要6条记录,当我查询时,我将每次获得一次唯一的行六次,然后从第一次开始再次开始,或者每次最重要的一次都没有重复记录/ p>
答案 0 :(得分:0)
每次会给你6个随机行。如果您的id不是唯一的主键,则Group By将确保唯一的行,因此可能不需要 - 具体取决于您的表结构。
SELECT TOP 6 id, name, ABS(CAST(CAST(NEWID() AS VARBINARY) AS INT)) AS [RandomNumber]
FROM customer
GROUP BY id,name
ORDER BY [RandomNumber]
修改:抱歉!没有正确地阅读这个问题。虽然每次都可以使用它来获取随机行:)
如果您希望一次以1个随机顺序获取所有6行,则需要在某处存储订单。建议创建临时表并从那里进行选择,或者如果使用前端网页,则获取所有6行并存储在数据集中。
答案 1 :(得分:0)
你可以使用那个逻辑, “milisecond”当前日期的一部分总是在变化。我们有一个id列作为数字。因此我们可以使用模块化函数来获得随机顺序:
create table #data(id numeric(10), name varchar(20))
insert #data select 209096 , 'Pharmacy'
insert #data select 204200 , 'Eyecare Center'
insert #data select 185718 , 'Duffy PC'
insert #data select 214519 , 'Shopko'
insert #data select 162225 , 'Edward Jones'
insert #data select 7609 , 'Back In Action Chiropractic Center'
select * from #data order by id % (datepart(ms, getdate()))
答案 2 :(得分:0)
好吧也许在SQL中还有另一种方法可以做到这一点。添加一个新的BIT列“selected”。绝对不是最快/最好的表现方式。
DECLARE @id INT
IF NOT EXISTS (SELECT TOP 1 id FROM customer WHERE selected = 0)
BEGIN
UPDATE customer SET selected = 0
END
SELECT @id = id FROM
(SELECT TOP 1 id, ABS(CAST(CAST(NEWID() AS VARBINARY) AS INT)) AS [RandomNumber]
FROM customer WHERE selected = 0
ORDER BY [RandomNumber]) a
UPDATE customer SET selected = 1 WHERE id = @id
SELECT id, name FROM customer WHERE id = @id