SQL выбрка случайных строк
От: wp  
Дата: 02.08.02 03:16
Оценка:
Как выбрать из таблицы n случайных строк. (не кусок таблицы, а именно случайных)?
Re: SQL выбрка случайных строк
От: Zar Россия  
Дата: 02.08.02 04:26
Оценка:
Здравствуйте wp, Вы писали:

wp>Как выбрать из таблицы n случайных строк. (не кусок таблицы, а именно случайных)?

в чистом виде, на SQL — никак. Искусственно — можно. например, если столбец id является уникальным ключем, то можно сделать что-то типа

SELECT TOP n * FROM Table WHERE Right(convert(id, varchar), 1)='0'
[ Zarathustra ]
Re: SQL выбрка случайных строк
От: Lexey Россия  
Дата: 02.08.02 06:39
Оценка:
Здравствуйте wp, Вы писали:

wp>Как выбрать из таблицы n случайных строк. (не кусок таблицы, а именно случайных)?


Есть несколько вариантов.
1) Если у тебя есть числовой ключ и ты знаешь его текущий диапазон значений (всегда можно получиться черз select min(id), max(id) ...), то можно сгенерировать случайное значение и сделать select distinct ... where id >= random. Работать будет быстро, но единственный минус — невозможно управлять распределением, т.к. в ключе могут быть дырки.
2) Открываешь всю таблицу в курсоре с абсолютным позиционированием. Генерируешь случайное смещение, делаешь фетч записи по этому смещению. Работать будет медленнее, чем 1), но зато можно сгенерировать произвольное распределение.
Re: SQL выбрка случайных строк
От: Vaso Австралия  
Дата: 02.08.02 08:51
Оценка:
Здравствуйте wp, Вы писали:

wp>Как выбрать из таблицы n случайных строк. (не кусок таблицы, а именно случайных)?



Если основная задача — сократить объем обработки для создания статистики равномерно по всем строкам таблицы, то (положившись на хаотичный порядок следования строк) открыть курсор и пройтись по таблице с
FETCH RELATIVE <n> ...

1/n = доля рассматриваемых строк.
Для пущей случайности можно предварительно спозиционировать курсор на запись со случайным абсолютным смещением в диапазоне от 1 до n.
Vaso
Re: SQL выбрка случайных строк
От: WPooh США  
Дата: 03.08.02 09:18
Оценка:
Здравствуйте wp, Вы писали:

wp>Как выбрать из таблицы n случайных строк. (не кусок таблицы, а именно случайных)?


Если на MS SQL, то можно попробовать так:
SELECT DISTINCT TOP 3 a.ID, a.Name FROM table1 as a INNER JOIN
(SELECT CAST(RAND(DatePart(mm, getdate())*100000 + DatePart(ss,getdate())*2000
+DatePart(ms, getdate()) as int) as random_value FROM table1 as c GROUP BY ID) as b
ON a.ID=b.random_value

Вместо TOP 3 можно поставить нужную чиселку (n), а множители у слагаемых частей даты
подобрать по вкусу. Ну и разные комбинации полей или таблиц — в общем, это просто идея,
вам может быть виднее как лучше сделать, я не анализировал насколько равномерно распределяются числа.

Успехов!
К этому моменту у меня внутри 0.5, 0.7, 0.33 (с) НС
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.