我有两个几乎相似的查询:
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的影响是什么?
答案 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
;