我有这个问题,我想从一个表中随机提取一些数据,我不想在这些提取之间重复记录,以便当我将所有不同的样本连接在一起时,它们看起来像主表。
我正在使用 sql server 2012
提前致谢
TABLESAMPLE 不能提供您需要的样本之间的互斥性质,即使它的 REPEATABLE 种子也是如此。所以我会考虑使用像 NTILE 这样的东西来滚动你自己的。例如,假设您的表有一个主键并且您需要 10 个样本,请创建一个包含样本 ID 和表的主键的表。将它用作“母版”来创建您的样本,然后您可以保证它们不会重叠。这是一个简单的例子:
-- Create your sample master table; I'm using a temp table here
-- but you could use a permanent one
SELECT NTILE(10) OVER( ORDER BY NEWID() ) sampleId, yourPrimaryKey
INTO #tmp
FROM dbo.yourTable
-- Create the sample, eg sample 3 of 10
SELECT m.*
FROM dbo.yourTable m
WHERE EXISTS
(
SELECT *
FROM #tmp t
WHERE t.sampleId = 3
AND m.yourPrimaryKey = t.yourPrimaryKey
)
Run Code Online (Sandbox Code Playgroud)