Есть ли у кого-нибудь идеи по созданию загруженного образца строк в T-SQL? Проблема с использованием чего-то вроде NEWID()
или RAND()
, а затем просто сортировка заключается в том, что вы создаете случайную выборку без замены. Бутстрапирование должно выполняться путем сэмплирования с заменой.
Создание загрузочных образцов в T-SQL
Ответ 1
Здесь одно решение. Он начинается с назначения идентификатора строки каждой строке в таблице совокупности.
Далее, равномерное случайное целое число между 1 и числом строк населения включительно генерируется с помощью вызова RAND() через представление и функцию RandMod(), как описано в Вопрос 3531450.
Эти два запроса объединяются для создания случайной выборки с заменой.
Чтобы получить загрузочный образец размера K < N, сортируйте по NEWID() и возьмите верхние K строк.
SELECT TOP K
key
, NEWID()
FROM
(
SELECT CAST(1 + (SELECT COUNT(*) FROM table))*RandMod() AS int) AS rowchoice
FROM table
) AS r
LEFT OUTER JOIN
(
SELECT key
, ROW_NUMBER() OVER(ORDER BY key) AS rowid
FROM table
) AS t
ON rowchoice = rowid
ORDER BY 2