我需要从(约)230,000行(每行上有一个唯一的自动生成编号)生成(约)2500行的系统随机样本。系统随机抽样 - Teradata SQL Ast
这可能使用Teradata SQL ast吗? (样本函数产生一个简单的随机样本。)
谢谢你的时间。
我需要从(约)230,000行(每行上有一个唯一的自动生成编号)生成(约)2500行的系统随机样本。系统随机抽样 - Teradata SQL Ast
这可能使用Teradata SQL ast吗? (样本函数产生一个简单的随机样本。)
谢谢你的时间。
select rank() over(order by $primary_index_key), t1.*
FROM
(select * from $table_name
sample 2500) t1
助理会这样做,其他客户也会这样做。 同样的方法可以用来生成获胜的强力球号码。
我可能会错过一些东西,但我认为这会为我提供一个简单的随机样本,而不是一个系统的样本。 – Kristen
时,已经是一个不间断的唯一行号:
select t.*
from mytable as t
cross join
(select random(1,2500) as rnd) as dt -- random start row
where rownumber mod 2500 = rnd -- every 2500 rows
否则ROW_NUMBER可用来创建它:
select t.*
from mytable as t
cross join
(select random(1,2500) as rnd) as dt
qualify ROW_NUMBER() OVER (ORDER BY whatever_determines_your_order) mod 2500 = rnd
从您的意见,我认为你不能做对飞。首先,您需要将包含步骤#和step_value,例如生成一些表:
[1,2500],[2,5000],... [X,X * 2500]
比你应该将此表连接到您的查询并按逻辑限制行号:rn = random_seed + step_value。 它看起来像这样:
select
from (
select t1.*
, row_number() over("ordering logic") as rn
from my_table
) as t1
, (select random(1,2500) as random_seed) as seed --so it will be generated only once
where exists (
select 1 from sampling_table as t2
where t1.rn = t2.step_value + seed.random_seed
)
Sample函数产生**简单的**随机样本。你如何定义*系统*部分? – dnoeth
是的,它确实产生了一个简单的随机样本。我的问题的重点 - 但我想我的脑子已经系统化了!系统样本是间隔样本。我需要选择一个随机开始(简单随机采样),然后以2500的间隔选择行。例如:如果我的随机开始是行号1000,那么我会选择行号3500,然后选择行号6000,然后选择行号8500等等。 – Kristen