【问题标题】:BigQuery Error: Encountered " "OVER" "OVER ""BigQuery 错误:遇到““OVER”“OVER”“
【发布时间】:2014-09-15 06:55:49
【问题描述】:

我尝试在BigQuery 控制台中执行此sql 语句,但出现如下错误。

任何人都可以就此提出建议吗?

"Error: Encountered " "OVER" "OVER "" at line 5, column 99. Was expecting: "END" ..."

SELECT      *
FROM        (SELECT
                  *
                        , CASE 
                            WHEN initiator in ('01_User') THEN RANK() OVER (PARTITION BY item_id, log_date_desc, type ORDER BY log_date_desc DESC)
              ELSE RANK() OVER (PARTITION BY item_id, log_date_desc ORDER BY log_date_desc  DESC) 
              END AS ord
            FROM        temp.step1_itemlogall
            ) AS t
WHERE       ord = 1

谢谢。

【问题讨论】:

    标签: google-bigquery


    【解决方案1】:

    我认为问题在于将分析函数放在 CASE 语句中。您可以将其重写为计算这两个函数的内部选择,然后在外部查询中选择正确的一个。例如:

    SELECT *
    FROM (
      SELECT    
        CASE WHEN initiator IN ('01_User') 
        THEN ord1
        ELSE ord2    
        END AS ord
      FROM (  
      SELECT *,
          RANK() OVER (PARTITION BY item_id, log_date_desc, type
                       ORDER BY log_date_desc DESC) as ord1,
          RANK() OVER (PARTITION BY item_id, log_date_desc 
                       ORDER BY log_date_desc  DESC) as ord2
        FROM temp.step1_itemlogall))
    WHERE ord = 1
    

    我认为该错误消息的真正解释在这里,但是:https://www.youtube.com/watch?v=2OBZf0QdKdE

    【讨论】:

      【解决方案2】:

      在 UI 或 API 调用中切换到 STANDARD SQL,只有旧版 SQL 引擎会抛出此错误。

      【讨论】:

        猜你喜欢
        • 2022-12-08
        • 1970-01-01
        • 2018-10-16
        • 1970-01-01
        • 2021-02-19
        • 2011-09-29
        • 2018-11-23
        • 2016-06-30
        • 1970-01-01
        相关资源
        最近更新 更多