相当于Teradata的ROWNUM

时间:2014-07-23 09:21:49

标签: teradata

有没有相当于" ROWNUM"在teradata?我必须在teradata中实现以下查询,它与oracle运行良好。任何想法或建议?

    INSERT INTO ADDRES(CITY,STATEPROVINCEID) SELECT 'sample',AA.ID FROM
    AA WHERE ROWNUM<=1000

2 个答案:

答案 0 :(得分:3)

由于没有ORDER BY,您只需使用:

INSERT INTO ADDRES(CITY,STATEPROVINCEID) 
SELECT TOP 1000 'sample',AA.ID 
FROM AA

但这不是随机的,它只是在AMP上找到的前1000行。

获取采样行:

INSERT INTO ADDRES(CITY,STATEPROVINCEID) 
SELECT 'sample',AA.ID 
FROM AA
SAMPLE 1000

如果您是统计学家并且需要真正的随机样本切换到:

SAMPLE RANDOMIZED ALLOCATION 1000

您还可以获得多个样本,最多16个样本,例如

SAMPLE 1000,2000 --use column SAMPLEID to know which row belongs to which sample 

或分数样本:

SAMPLE 0.1 -- 10% of the rows

或分层样本,即来自不同群体的样本:

SAMPLE WHEN col< 0 THEN 10
       WHEN col <100 THEN 20 
       ELSE 50 
END

答案 1 :(得分:1)

我不确定它会对您的情况有所帮助,但为了将来参考,Teradata有一个ROW_NUMBER()函数。它的工作原理与其他人一样:

ROW_NUMBER over ([PARTITION by <column>] ORDER by <column1>[<column2]...]).

Teradata的另一个优势是能够使用QUALIFY限制它,而不必使用派生表。

Select
...
from
...
QUALIFY ROW_NUMBER over (order by...)