按col顺序划分的Teradata分区为

时间:2017-09-12 17:46:15

标签: sql sql-order-by teradata

在研究我以前的一个问题时,我使用了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在这里有一些特殊含义吗?

1 个答案:

答案 0 :(得分:1)

您的假设是正确的。你可以在那里坚持任何价值,你会得到相同的结果。

使用ROW_NUMBER()时,窗口函数的OVER()部分的ORDER BY子句是必需的。

坚持不变就是说"我不关心你保留的COL记录,只保留其中的750条"

正如@dnoeth指出的那样,因为你是按常量排序的,并且由于Teradata的并行性质以及它如何影响并行系统中的数据检索(以及一般的RDBMS的性质),所以不能保证你会两次运行之间得到相同的结果。