-1

我不得不将我所有的旧 SQL 转换为标准 SQL。

在将其切换到标准 SQL 后,我尝试加入和 rank(),但收到一条错误消息:

“参数数量与分析函数 RANK 不匹配。支持的签名:RANK()”

这是否意味着函数 RANK() 在 SQL 标准中不起作用?Bigquery 突出显示“RANK(MILESTONE)”作为错误。

非常感谢您的帮助。

    JOIN
    (SELECT * FROM 
        (SELECT 
            CASE WHEN MILESTONE NOT LIKE '%M0' THEN 'CWV' ELSE MILESTONE END MILESTONE
            , MAX((LAST_MODIFIED_DATE)) AS LAST_MODIFIED_DATE
            , RANK(MILESTONE) OVER (ORDER BY MILESTONE DESC) AS RANK2     ------------NEED FIXING
            FROM `XXXXX.com:dataservices.Finance.FINANCE_SF_PRODUCT_COST_SNAPSHOT` 
            WHERE LOCKED IS false
            AND (DATE(LAST_MODIFIED_DATE) = (SELECT MAX(DATE(LAST_MODIFIED_DATE)) 
            FROM `XXXXXX.com:dataservices.Finance.FINANCE_SF_PRODUCT_COST_SNAPSHOT`)
            OR MILESTONE LIKE 'M0')
            AND PMD_PRODUCT_STATUS NOT IN ('Canceled','End of Life','No Longer Shipping')
            AND (MILESTONE NOT LIKE '%Exit%' OR MILESTONE NOT LIKE '%M0' OR MILESTONE NOT LIKE '%WP%')
            AND MILESTONE <> '2021_Q2_M0' -- need to show new qtr after each 20th of the month (just increase the Q#+1)
            GROUP BY 1
            ORDER BY 2 DESC
        )
        WHERE RANK2 < 4                       ------------NEED FIXING
    ) MILE
ON PCS.MILESTONES = MILE.MILESTONE
4

1 回答 1

1

rank() 没有在任何数据库中获取任何参数。

所以 :

select ...
     , RANK() OVER (ORDER BY MILESTONE DESC) AS RANK2 
...

我假设您打算按您分组的表达式排序:

select ...
     , RANK() OVER (ORDER BY CASE WHEN MILESTONE NOT LIKE '%M0' THEN 'CWV' ELSE MILESTONE END DESC) AS RANK2 
...
于 2021-04-23T15:10:56.377 回答