Я хотел бы случайным образом отсортировать результат в повторяющихся целях, например, для подкачки страниц. Для этого NEWID () является слишком случайным в том, что те же самые результаты не могут быть получены повторно. Порядок по Ранду (семени) был бы идеальным, поскольку с тем же семенем получился бы тот же случайный набор. К сожалению, состояние Rand () сбрасывается с каждой строкой, есть ли у кого-нибудь решение?
declare @seed as int;
set @seed = 1000;
create table temp (
id int,
date datetime)
insert into temp (id, date) values (1,'20090119')
insert into temp (id, date) values (2,'20090118')
insert into temp (id, date) values (3,'20090117')
insert into temp (id, date) values (4,'20090116')
insert into temp (id, date) values (5,'20090115')
insert into temp (id, date) values (6,'20090114')
-- re-seeds for every item
select *, RAND(), RAND(id+@seed) as r from temp order by r
--1 2009-01-19 00:00:00.000 0.277720118060575 0.732224964471124
--2 2009-01-18 00:00:00.000 0.277720118060575 0.732243597442382
--3 2009-01-17 00:00:00.000 0.277720118060575 0.73226223041364
--4 2009-01-16 00:00:00.000 0.277720118060575 0.732280863384898
--5 2009-01-15 00:00:00.000 0.277720118060575 0.732299496356156
--6 2009-01-14 00:00:00.000 0.277720118060575 0.732318129327415
-- Note how the last column is +=~0.00002
drop table temp
-- interestingly this works:
select RAND(@seed), RAND()
--0.732206331499865 0.306382810665955
Обратите внимание, я попробовал Rand (ID), но это просто оказалось отсортированным. Видимо Рэнд (n) <Рэнд (n + 1) </p>