Я хотел бы случайным образом отсортировать результат в повторяемом виде для таких целей, как пейджинг. Для этого NEWID() слишком случайен, так что одни и те же результаты не могут быть повторно получены. Заказ Rand (seed) был бы идеальным, так как с одним и тем же семенем получается такая же случайная коллекция. К сожалению, состояние 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([email protected]) 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), но это просто сортируется. По-видимому, Rand (n) Rand (п + 1)