繁体   English   中英

Bigquery SQL 标准排名()

[英]Bigquery SQL Standard Rank()

我必须将所有旧版 SQL 转换为标准 SQL。

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

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

这是否意味着 function 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

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 
...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM