【问题标题】:In Snowflake, how to reference CTE in following table在 Snowflake 中,如何在下表中引用 CTE
【发布时间】:2022-06-14 22:27:20
【问题描述】:

我们在雪花中有以下工作查询:

with
    latest_track_metrics as (
        select * from track_metrics
        where "week_id" = (select max("week_id") from track_metrics)
    )

select * from latest_track_metrics

为了稍微清理一下这段代码,我们很乐意将 select max("week_id") from track_metrics 重构为带有变量名的自己的行,如下所示:

with
    max_weekid as (select max("week_id") from track_metrics),
    latest_track_metrics as (
        select * from track_metrics
        where "week_id" = max_weekid // error on this line, not recognizing max_weekid
    )

select * from latest_track_metrics

但是后一个查询返回错误Error: invalid identifier 'MAX_WEEKID' (line 5)。我们尝试用括号、引号、反引号等将max_weekid 包裹起来,但都没有成功。这种方式可以调用CTE吗?

【问题讨论】:

  • 将 max_weekid 视为子查询或表。而不是 WHERE week_id= 您应该将它与 track_metrics 与 JOIN 子句连接起来,然后它的行为就会像您预期的那样。
  • 加入表,然后,我假设,过滤匹配来自 max_weekid 的值的值?会试一试。

标签: snowflake-cloud-data-platform


【解决方案1】:

使用 QUALIFY 和窗口化 MAX:

with latest_track_metrics as (
   select * 
   from track_metrics
   qualify "week_id" = max("week_id") over()
)
select * 
from latest_track_metrics;

【讨论】:

    【解决方案2】:

    max_weekid 视为子查询或表。

    您应该将它与带有JOIN 子句的track_metrics 一起加入,而不是WHERE week_id =

    大概是这样的:

    with
        max_weekid as (select max("week_id") AS M from track_metrics),
        latest_track_metrics as (
            select * from track_metrics
            inner join max_weekid
            on track_metrics.week_id = max_weekid.M)
    
    select * from latest_track_metrics
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多