【发布时间】:2014-10-16 13:04:41
【问题描述】:
是否有人对如何在 T-SQL 中生成引导的行样本有一些想法?使用NEWID() 或RAND() 之类的东西然后只是排序的问题是你最终会生成一个没有替换的随机样本。引导应该通过带放回抽样来完成。
【问题讨论】:
标签: sql-server tsql random-sample
是否有人对如何在 T-SQL 中生成引导的行样本有一些想法?使用NEWID() 或RAND() 之类的东西然后只是排序的问题是你最终会生成一个没有替换的随机样本。引导应该通过带放回抽样来完成。
【问题讨论】:
标签: sql-server tsql random-sample
这是一种解决方案。它首先为人口表中的每一行分配一个行标识符。
接下来,如Question 3531450 中所述,使用通过视图和 RandMod() 函数调用 RAND() 生成介于 1 和总体行数之间的统一随机整数。
将这两个查询连接在一起以创建具有替换的随机样本。
要获得大小为 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
【讨论】: