Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Можно ли заменить order by newid()  [new]
user87
Member

Откуда:
Сообщений: 257
Доброго времени суток.

Подскажите, пожалуйста.

У меня есть таблица с полями Id int,Name varchar(50)
Id От 1 до 570000

Хочу выбрать одну случайную запись

select top 1 Id,Name from Table order by newid()

Подскажите, пожалуйста, есть ли другой способ, не применяя newid() выбрать случайную запись?

Заранее благодарен за Ваши советы.
2 мар 15, 23:18    [17334841]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли заменить order by newid()  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31964
user87
Подскажите, пожалуйста, есть ли другой способ, не применяя newid() выбрать случайную запись?
Например, сгенерить случайное целое число от 1 до количества записей, пронумеровать все записи таблицы (оконной функцией), взять нужную запись.

А цель какая, почему нельзя применить newid()?
2 мар 15, 23:20    [17334848]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли заменить order by newid()  [new]
user87
Member

Откуда:
Сообщений: 257
С newid() как-то долго работает, попробую как Вы сказали, правильно ли понимаю, что мне надо создать таблицу от 1 до масимального Id далее по нему брать rand()
2 мар 15, 23:23    [17334859]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли заменить order by newid()  [new]
есть ли другой
Guest
user87
С newid() как-то долго работает, попробую как Вы сказали, правильно ли понимаю, что мне надо создать таблицу от 1 до масимального Id далее по нему брать rand()

у вас уже есть таблица с "от 1 до максимального ID" - это сама исходная таблица.
rand() разве на входе параметром принимает таблицу?
задача в целом не про субд. нужна "клиенту" случайная запись - пусть запрашивает запись со случайным id. зачем эти смыслы в бд?
2 мар 15, 23:34    [17334882]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли заменить order by newid()  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31964
user87
С newid() как-то долго работает, попробую как Вы сказали, правильно ли понимаю, что мне надо создать таблицу от 1 до масимального Id далее по нему брать rand()
Неправильно. Я сказал, что нужно пронумеровать в процессе запроса, используя оконные функции.

Пронумеровать записи в таблице можно, но придётся их перенумеровывать при удалении записей.

Если удаления редкие, то это самое правильное.
user87
У меня есть таблица с полями Id int,Name varchar(50)
Id От 1 до 570000
Id без перерывов? Удалений не бывает?
Тогда в качестве номеров можно использовать этот Id. В противном случае нужно сделать новое поле.
2 мар 15, 23:44    [17334912]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли заменить order by newid()  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
https://www.sql.ru/forum/1044370/randomnaya-vyborka
2 мар 15, 23:50    [17334922]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли заменить order by newid()  [new]
user87
Member

Откуда:
Сообщений: 257
Спасибо большое.
4 мар 15, 02:23    [17340390]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли заменить order by newid()  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4902
SELECT * FROM (SELECT number = ROW_NUMBER() OVER (ORDER BY number) FROM master..spt_values i) i
ORDER BY HASHBYTES('MD5', CONVERT(VARCHAR(30), GETDATE(), 121) + CAST(number AS VARCHAR(20)))
4 мар 15, 12:07    [17341529]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить