我正试图找到一种方法来分割测试记录。我有几个列需要考虑,如mailsegment和pack。我希望在两个级别上得到一个均匀(或接近)的分割并卷起来。
我已经看到了这个解决方案(How do I select TOP 5 PERCENT from each group?)并在详细级别上将其应用于我的问题并取得了合理的成功,但是当我将我的片段提升到包级别时它甚至都没有。这是由于邮件分段在某些情况下具有奇数个记录。有没有一种方法可以在包装级别(例如只有2包)平衡这一点,并且仍然可以在我的邮件段(200多个段)中准确地对我的样本进行分层?
提前感谢您的帮助。
答案 0 :(得分:1)
你想要的是一个分层的样本。您可以使用row_number()
并取第n个值来执行此操作:
select t.*
from (select t.*,
row_number() over (partition by mailsegment, pack order by newid()) as seqnum
from table t
) t
where seqnum % 20 = 1;
编辑:
上面应该可行,但实际上更好的是在没有分区的情况下对数据进行排序。
有关更新:
with toupdate as (
select t.*,
row_number() over (order by mailsegment, pack, newid()) as seqnum
from table t
)
update toupdate
set myField = 'Test 1'
where seqnum % 20 = 1;
这适用于其他测试单元。