在研究我以前的一个问题时,我使用了this post的答案。我的查询如下:
sel
*
from (
sel distinct
COL,
FIELD
from TBL
where COL in (
-- subquery
)
and FIELD is not NULL
) q
qualify row_number() over (partition by COL order by 0) between 1 and 750
;
它做我想做的事,但我不完全理解它。问题出在partition by COL order by 0
位。我理解partition by
根据指定字段中的值将数据分成子组,我理解order by
,后跟字段名称将按该字段对每个分区的结果进行排序,但是我不明白它是如何用整数运算的。我的假设是在该位置放置任何常数将产生相同的结果。这个假设是否正确? 0
在这里有一些特殊含义吗?
答案 0 :(得分:1)
您的假设是正确的。你可以在那里坚持任何价值,你会得到相同的结果。
使用ROW_NUMBER()时,窗口函数的OVER()部分的ORDER BY子句是必需的。
坚持不变就是说"我不关心你保留的COL记录,只保留其中的750条"
正如@dnoeth指出的那样,因为你是按常量排序的,并且由于Teradata的并行性质以及它如何影响并行系统中的数据检索(以及一般的RDBMS的性质),所以不能保证你会两次运行之间得到相同的结果。