QUALIFY SUM(1)的效果(通过行无限制的分割)= 1?

时间:2017-02-22 15:30:08

标签: sql teradata window-functions

我有两个几乎相似的查询:

SELECT *
FROM table
QUALIFY SUM(1) OVER (PARTITION BY id_field ROWS UNBOUNDED PRECEDING) = 1;

SELECT *
FROM table
QUALIFY SUM(1) OVER (PARTITION BY id_field) = 1;

我无法理解ROWS UNBOUNDED PRECEDING对查询有什么影响的原因。

对我而言,似乎两个查询都会产生相同的结果,因为函数SUM不使用我的表的任何列,因此ROWS UNBOUNDED PRECEDING不会影响SUM。

但实际上,第一个查询产生的行数多于执行时的第二个行。

两个查询之间的区别是什么,以及ROWS UNBOUNDED PRECEDING对此特定QUALIFY的影响是什么?

1 个答案:

答案 0 :(得分:1)

第一个查询返回每个分区的第一行 它有一个"运行总计"逻辑。
第1行的总和为1,第2行为2,第3行为3等。

第二个查询从只有一行的分区返回行。

这将为您提供每个id_field的最后一条记录

SELECT   *
FROM     table
QUALIFY  row_number() OVER (PARTITION BY id_field order by ... desc) = 1
;