我需要從(約)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