如何从表中获取随机样本?我不想在样本之间重复记录

Jua*_* IC 1 sql-server

我有这个问题,我想从一个表中随机提取一些数据,我不想在这些提取之间重复记录,以便当我将所有不同的样本连接在一起时,它们看起来像主表。

我正在使用 sql server 2012

提前致谢

wBo*_*Bob 5

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)