【发布时间】:2014-09-14 09:49:45
【问题描述】:
在 teradata 中是否有与“ROWNUM”等效的内容?我必须在 teradata 中实现以下查询,它在 oracle 上运行良好。有什么想法或建议吗?
INSERT INTO ADDRES(CITY,STATEPROVINCEID) SELECT 'sample',AA.ID FROM
AA WHERE ROWNUM<=1000
【问题讨论】:
标签: teradata
在 teradata 中是否有与“ROWNUM”等效的内容?我必须在 teradata 中实现以下查询,它在 oracle 上运行良好。有什么想法或建议吗?
INSERT INTO ADDRES(CITY,STATEPROVINCEID) SELECT 'sample',AA.ID FROM
AA WHERE ROWNUM<=1000
【问题讨论】:
标签: teradata
由于没有 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
【讨论】:
我不确定它对您的情况是否有帮助,但为了将来参考,Teradata 有一个 ROW_NUMBER() 函数。它的工作原理和其他人的差不多:
ROW_NUMBER over ([PARTITION by <column>] ORDER by <column1>[<column2]...]).
Teradata 的另一个优势是能够使用 QUALIFY 对其进行约束,而不必使用派生表。
Select
...
from
...
QUALIFY ROW_NUMBER over (order by...)
【讨论】: