Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Выбрать оду случайную запись из таблицы / 20 сообщений из 20, страница 1 из 1
12.11.2020, 10:54
    #40017444
Shovgenyuk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать оду случайную запись из таблицы
Как выбрать одну случайную запись из таблицы?
или
Как выбрать одно случайное значение из одного столбца числового типа?

Выборка будет в цикле. Нужен максимальный разброс.
...
Рейтинг: 0 / 0
12.11.2020, 11:08
    #40017448
Oleg_SQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать оду случайную запись из таблицы
Shovgenyuk,

у вас в таблице 1 млрд строк с полем Val
999 999 999 имеют значение 1
1 строка имеет значение 0

Нужно выбрать 2 значения с "максимальным разбросом"
1 и 0 ?
или все же 1 и 1?

Можно в цикле заполнять временную таблицу значениями, которые уже получались.
А выбирать по условию SELECT TOP 1 Val FROM MyTable WHERE Val NOT IN (SELECT Val FROM #T)...
Это если таблица - Куча.
...
Рейтинг: 0 / 0
12.11.2020, 11:29
    #40017456
SQL2008
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать оду случайную запись из таблицы
(удалено)
...
Рейтинг: 0 / 0
12.11.2020, 12:04
    #40017460
vikkiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать оду случайную запись из таблицы
на таблицу есть хинт называющийся TABLESAMPLE (..)
не совсем рандомный в классическом понимании - но зато довольно шустрый
и не для малых таблиц.
...
Рейтинг: 0 / 0
12.11.2020, 12:05
    #40017461
komrad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать оду случайную запись из таблицы
...
Рейтинг: 0 / 0
12.11.2020, 12:25
    #40017463
Shovgenyuk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать оду случайную запись из таблицы
Oleg_SQL
Shovgenyuk,

у вас в таблице 1 млрд строк с полем Val
999 999 999 имеют значение 1
1 строка имеет значение 0

Нужно выбрать 2 значения с "максимальным разбросом"
1 и 0 ?
или все же 1 и 1?


1 и 1
...
Рейтинг: 0 / 0
12.11.2020, 12:27
    #40017465
Shovgenyuk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать оду случайную запись из таблицы


ORDER BY NEWID()
затратно и долго будет
...
Рейтинг: 0 / 0
12.11.2020, 12:34
    #40017467
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать оду случайную запись из таблицы
Примерно так
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
select
 e.[value]
from
 (select min([value]), max([value]) from MyTable) a(min_value, max_value) cross apply
 (select a.min_value + rand(checksum(newid())) * (a.max_value - a.min_value + 1)) b(random_value) cross apply
 (select top (1) [value] from MyTable where [value] <= b.random_value order by [value] desc) c(low_bound) cross apply
 (select top (1) [value] from MyTable where [value] >= b.random_value order by [value]) d(high_bound) cross apply
 (select top (1) [value] from MyTable with (forceseek) where [value] between c.low_bound and d.high_bound order by rand(checksum(newid()))) e([value])


ЗЫ: Нужен индекс по [value]
...
Рейтинг: 0 / 0
12.11.2020, 12:38
    #40017472
vikkiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать оду случайную запись из таблицы
тут как-бы ТС сам не определился по пободу довольно разных вещей:
случайное значение (из записей) или всё-таки максимальный разброс
(что может быть ещё с натяжкой интерпретировано как равномерное распределение)

откуда прилетело требование (и попытка решения задачи) по сортировке - остаётся только догадываться
(какой там метод применили для исходной задачи с довольно мутным пока описанием)
...
Рейтинг: 0 / 0
12.11.2020, 12:51
    #40017479
Shovgenyuk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать оду случайную запись из таблицы
vikkiv
тут как-бы ТС сам не определился по пободу довольно разных вещей:
случайное значение (из записей) или всё-таки максимальный разброс
(что может быть ещё с натяжкой интерпретировано как равномерное распределение)

откуда прилетело требование (и попытка решения задачи) по сортировке - остаётся только догадываться
(какой там метод применили для исходной задачи с довольно мутным пока описанием)


Задача следующая:

Есть таблица Tab1 из полями FieldId, ... FieldFK
FieldId - primary key
FieldFK - foreign key. Содержит ключи из Tab2

Надо хаотично перемешать значения FieldFK во всей таблице Tab1
...
Рейтинг: 0 / 0
12.11.2020, 12:53
    #40017480
Кесарь
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать оду случайную запись из таблицы
vikkiv
откуда прилетело требование (и попытка решения задачи) по сортировке - остаётся только догадываться
(какой там метод применили для исходной задачи с довольно мутным пока описанием)


Да и так понятно, что это задание студенту. Такие бессмысленные задачи ставят только преподаватели, ну и ещё особо умные эээ специалисты работодателей на собеседованиях (типа сделай мне за 5 минут то, на что умные люди в прошлом потратили не один день, прежде чем написать свои умные книги, в которых я это прочёл в институте и до сих пор помню).
...
Рейтинг: 0 / 0
12.11.2020, 13:38
    #40017502
Dimbuch®
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать оду случайную запись из таблицы
Shovgenyuk,

Сортировать по GUID

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT NEWID() AS guid, a.txt
FROM (
    SELECT 'name1' AS txt
    UNION ALL SELECT 'name2' AS txt
    UNION ALL SELECT 'name3' AS txt
    UNION ALL SELECT 'name4' AS txt
    UNION ALL SELECT 'name5' AS txt
) a
ORDER BY 1
...
Рейтинг: 0 / 0
12.11.2020, 19:09
    #40017687
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать оду случайную запись из таблицы
Shovgenyuk,

решение состоит в том, чтобы 1) иметь генератор целочисленных значений с заданной плотностью распределения 2) иметь таблицу, записи из которой не удаляют 3) иметь пронумерованный список ключей этой таблицы. Далее по значению генератора выбирать ключ.
...
Рейтинг: 0 / 0
12.11.2020, 20:25
    #40017705
НеофитSQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать оду случайную запись из таблицы
Shovgenyuk

Надо хаотично перемешать значения FieldFK во всей таблице Tab1


По-моему, вы только что описали решение. Выбираете метод перемешивания, и перемешиваете.
Вам предложить метод перемешивания?
...
Рейтинг: 0 / 0
12.11.2020, 23:35
    #40017746
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать оду случайную запись из таблицы
Shovgenyuk
Задача следующая:

Есть таблица Tab1 из полями FieldId, ... FieldFK
FieldId - primary key
FieldFK - foreign key. Содержит ключи из Tab2

Надо хаотично перемешать значения FieldFK во всей таблице Tab1
Если вам нужно обновить сразу всю таблицу, то лучше действительно отсортировать про newid()
В том числе можно подготовить данные в нескольких таблицах, по числу полей, если таблица очень большая.

Например, так (update из select сами сделаете):
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
--truncate table #t
create table #t(id int, i1 int, i2 int, i3 int)
insert #t (id, i1, i2, i3)
select n, n, n, n
from (select row_number() over(order by id) as n
from sysobjects o ) t


select i.id, i.i1, i.i2, i.i3, i.id_row, i1.i1, i2.i2, i3.i3
from (
	select id, i.i1, i2, i3, row_number() over(order by id) as id_row
	from #t i
) as i
	join (
		select i1, row_number() over(order by newid()) as id_row
		from #t
	) i1 on i1.id_row = i.id_row
	join (
		select i2, row_number() over(order by newid()) as id_row
		from #t
	) i2 on i2.id_row = i.id_row
	join (
		select i3, row_number() over(order by newid()) as id_row
		from #t
	) i3 on i3.id_row = i.id_row
...
Рейтинг: 0 / 0
13.11.2020, 09:55
    #40017812
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать оду случайную запись из таблицы
Кесарь
vikkiv
откуда прилетело требование (и попытка решения задачи) по сортировке - остаётся только догадываться
(какой там метод применили для исходной задачи с довольно мутным пока описанием)


Да и так понятно, что это задание студенту. Такие бессмысленные задачи ставят только преподаватели, ну и ещё особо умные эээ специалисты работодателей на собеседованиях (типа сделай мне за 5 минут то, на что умные люди в прошлом потратили не один день, прежде чем написать свои умные книги, в которых я это прочёл в институте и до сих пор помню).
может, эту БД разрабам сторонним отдают
одна из частей работы, чтобы хоть как-то обезопасить данные
...
Рейтинг: 0 / 0
13.11.2020, 13:03
    #40017885
Кесарь
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать оду случайную запись из таблицы
andreymx
Кесарь
пропущено...


Да и так понятно, что это задание студенту. Такие бессмысленные задачи ставят только преподаватели, ну и ещё особо умные эээ специалисты работодателей на собеседованиях (типа сделай мне за 5 минут то, на что умные люди в прошлом потратили не один день, прежде чем написать свои умные книги, в которых я это прочёл в институте и до сих пор помню).
может, эту БД разрабам сторонним отдают
одна из частей работы, чтобы хоть как-то обезопасить данные


А как эти специалисты с такой базой работать будут?
...
Рейтинг: 0 / 0
14.11.2020, 08:49
    #40018237
Shovgenyuk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать оду случайную запись из таблицы
Кесарь
andreymx
пропущено...
может, эту БД разрабам сторонним отдают
одна из частей работы, чтобы хоть как-то обезопасить данные


А как эти специалисты с такой базой работать будут?


Если так интересно, то я отвечу.
Рабочая база от клиента превращается в демонстрационную для изготовления видео-инструкций с разными примерами.
Надо деперсонализировать все данные
...
Рейтинг: 0 / 0
14.11.2020, 10:16
    #40018243
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать оду случайную запись из таблицы
Shovgenyuk
Кесарь
пропущено...


А как эти специалисты с такой базой работать будут?


Если так интересно, то я отвечу.
Рабочая база от клиента превращается в демонстрационную для изготовления видео-инструкций с разными примерами.
Надо деперсонализировать все данные
Деперсонализацию делают изменением самих данных, атрибутов, содержащих персональные данные. А у вас же внутренние ссылки, как я понял? Что толку их "перемешивать"?
У нас, например, ссылки не меняют, хотя у нас не только персональные, но и банковские данные, которые в соответствии с законодательством охраняются сильнее.

Впрочем, я не знаю вашей модели данных, может, это для вашей системы и правильно. Может, это ссылки на записи в КЛАДР-е каком нибудь? Тогда всё правильно.

ИМХО тогда лучше использовать мой вариант (и другие тоже писали про такой подход), раз нужно сделать полную загрузку с искажением.
...
Рейтинг: 0 / 0
14.11.2020, 17:17
    #40018344
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать оду случайную запись из таблицы
alexeyvg
Например, так (update из select сами сделаете):
Или даже лучше не update, а insert
И хоть по 100 млрд записей деперсонализируйте.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Выбрать оду случайную запись из таблицы / 20 сообщений из 20, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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