【发布时间】:2017-07-12 18:03:20
【问题描述】:
我有两个几乎相似的查询:
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 有什么影响?
【问题讨论】:
-
你到底想做什么?
-
ROWS UNBOUNDED PRECEDING没有order by? -
我试图根据另一列的最近日期为每个不同的 id_field 获取一行。原始查询有一个 ORDER BY 日期字段,但我在问题中删除了它,以便专注于为什么我的查询结果中的行数不同。
-
只需将 SUM 移动到 Select 子句中,您就会看到计算结果。
标签: sql teradata window-functions