You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Databricks SQL的后续CTE中使用窗口函数?

Databricks SQL中能否在后续CTE中使用前置CTE定义的窗口函数列?

你的问题核心不是Databricks SQL不支持在后续CTE中引用前置CTE里窗口函数生成的列,而是示例代码里存在语法错误,导致窗口函数未正确生成目标列,进而引发后续的列未找到报错。

问题代码中的错误点

在base CTE的窗口函数定义里,partition by col1后面多了一个多余的逗号:

row_number() OVER(partition by col1, ORDER BY col2, col3) as primary_rank

这个语法错误会导致SQL解析失败,primary_rank列并未被正确创建,所以后续middle CTE里引用该列时会提示无法解析。

修正后的代码

去掉partition by子句末尾的多余逗号,即可正常在后续CTE中引用窗口函数生成的列:

with base as (
 select 
   *, 
   row_number() OVER(partition by col1 ORDER BY col2, col3) as primary_rank
 from table1
),
middle as (
 select *
 from base
 where primary_rank = 1
)
select ID, count(*) as n
from middle
group by ID
having n > 1

结论

Databricks SQL完全支持在后续CTE或SELECT语句中引用前置CTE里由窗口函数生成的列,只要前置CTE的语法正确,列能正常被创建即可。

内容的提问来源于stack exchange,提问作者smoot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 08:42:04