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

В старом форуме эта тема поднималась. Жаль, поиск не работает. Если админ может поспособствовать...
...
Рейтинг: 0 / 0
28.06.2002, 16:07:03
    #32034313
Sger
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать N случайных строк из SELECTa
Может экперты по теории вероятности и скажут свое фи но я в свое время особо не заморачиваясь завел в нужной таблице поле Rnd_FAX пробежал по нему курсором и заполнил его set Rnd_FAX = FLOOR(RAND()* 200000)
Кады надо выбираю TOP N order by Rnd_FAX а затем по всем этим N опять пробегаю курсором и set Rnd_FAX = FLOOR(RAND()* 200000)
...
Рейтинг: 0 / 0
28.06.2002, 16:47:16
    #32034318
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать N случайных строк из SELECTa
Если вам таки "не повезло" и у вас 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
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Выбрать N случайных строк из SELECTa / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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