powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Выбрать N случайных строк из SELECTa
5 сообщений из 5, страница 1 из 1
Выбрать N случайных строк из SELECTa
    #32034266
Bob
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Bob
Гость
Если кому-то приходилось решать задачу выбора случайным образом N строк из таблицы или select'a, поделитесь технологией, pls. Спасибо.
...
Рейтинг: 0 / 0
Выбрать N случайных строк из SELECTa
    #32034275
Фотография snake
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
 ... order by newid()
...
Рейтинг: 0 / 0
Выбрать N случайных строк из SELECTa
    #32034305
GreenSunrise
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
newid() не везде генерит "случайные" значения. Уникальные - да, обязательно случайные - нет.

В старом форуме эта тема поднималась. Жаль, поиск не работает. Если админ может поспособствовать...
...
Рейтинг: 0 / 0
Выбрать N случайных строк из SELECTa
    #32034313
Sger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может экперты по теории вероятности и скажут свое фи но я в свое время особо не заморачиваясь завел в нужной таблице поле Rnd_FAX пробежал по нему курсором и заполнил его set Rnd_FAX = FLOOR(RAND()* 200000)
Кады надо выбираю TOP N order by Rnd_FAX а затем по всем этим N опять пробегаю курсором и set Rnd_FAX = FLOOR(RAND()* 200000)
...
Рейтинг: 0 / 0
Выбрать N случайных строк из SELECTa
    #32034318
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если вам таки "не повезло" и у вас newid() не генерит "случайные" значения, то можно и так

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
USE pubs
GO
declare @a int, @b int, @rand_num int, @table_name varchar( 50 ), @pk_field_name varchar( 50 )
set @a =  1 
set @table_name = 'authors'
set @pk_field_name = 'au_id'

select @b=rows
from sysindexes a 
inner join sysobjects b on b.id = a.id
where indid IN( 0 ,  1 ) and b.name = @table_name and b.xtype = 'U'

 /*Random number between 1 and total table record count*/ 
set @rand_num = cast((@b-@a+ 1 )*RAND()+@a as int)

 --select @a, @b, @rand_num
 
declare @mysql varchar( 4000 )
set @mysql = 'select top 1 '+@pk_field_name+' from (select top '+CAST(@rand_num AS varchar)
+' '+@pk_field_name+' from '+@table_name+' order by '+@pk_field_name+') AS a order by '+@pk_field_name+' desc'
exec(@mysql)
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Выбрать N случайных строк из SELECTa
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]