Sql 限定和(1)对(按前面无边界的行划分)=1的影响?
我有两个几乎相似的问题:Sql 限定和(1)对(按前面无边界的行划分)=1的影响?,sql,teradata,window-functions,Sql,Teradata,Window Functions,我有两个几乎相似的问题: SELECT * FROM table QUALIFY SUM(1) OVER (PARTITION BY id_field ROWS UNBOUNDED PRECEDING) = 1; 及 我无法解释为什么前面的行没有限制对查询有任何影响 对我来说,似乎两个查询都会产生相同的结果,因为SUM函数没有使用表中的任何列,因此前面的行无界不会影响SUM 但实际上,当我执行第一个查询时,第一个查询产生的结果行比第二个查询多 两个查询之间的区别是什么?前面的无边界行对这个特定
SELECT *
FROM table
QUALIFY SUM(1) OVER (PARTITION BY id_field ROWS UNBOUNDED PRECEDING) = 1;
及
我无法解释为什么前面的
行没有限制
对查询有任何影响
对我来说,似乎两个查询都会产生相同的结果,因为SUM函数没有使用表中的任何列,因此前面的行无界不会影响SUM
但实际上,当我执行第一个查询时,第一个查询产生的结果行比第二个查询多
两个查询之间的区别是什么?前面的无边界行对这个特定限定有什么影响?第一个查询返回每个分区的第一行。
它具有“运行总计”逻辑。
第一行的总和为1,第二行为2,第三行为3,以此类推 第二个查询从只有一行的分区返回行
这将为您提供每个id_字段的最后一条记录
SELECT *
FROM table
QUALIFY row_number() OVER (PARTITION BY id_field order by ... desc) = 1
;
您实际想做什么?
前面的行无限制
没有排序依据
?我试图根据另一列的最新日期为每个不同的id_字段获取一行。最初的查询有一个ORDER BY date字段,但我在问题中删除了它,以便关注为什么查询结果中的行数不同。只需将总和移动到Select claus中,您就会看到计算结果。
SELECT *
FROM table
QUALIFY row_number() OVER (PARTITION BY id_field order by ... desc) = 1
;