【问题标题】:Second maximum value using OVER使用 OVER 的第二个最大值
【发布时间】:2016-08-20 03:55:41
【问题描述】:

我正在尝试将一个需求源与前两个不同的最高需求源进行比较,以便我可以在 SQL 中执行一些操作。

这是我所拥有的最大值和特定需求,但我不知道如何找到第二个最大值。我见过max(x) where x <> max(x),但我不确定如何将其用于 Windows 功能。

选择 row_id_str、Max_NR、Max_R

from(
    select row_id_str,
        MAX(NR_close) OVER (PARTITION BY row_id_str) as Max_NR,
        MAX(R_close) OVER (PARTITION BY row_id_str) as Max_R
    from(
        SELECT  row_id_str, demand, close,
        sum(if(demand = 'root', close, 0)) as R_close,
        sum(if(demand != 'root', close, 0)) as NR_close
        FROM [scratch] group by 1,2,3
        order by row_id_str, close desc)
    group by row_id_str, NR_close, R_close)
group by 1,2,3

解决方案

select row_id_str, Max_NR, Max_R, Sum(if(RN=2, NR_close, 0)) as Second_Max
from(
    select row_id_str,  NR_close,
    MAX(NR_close) OVER (PARTITION BY row_id_str) as Max_NR,
    MAX(R_close) OVER (PARTITION BY row_id_str) as Max_R,
    ROW_NUMBER() over (partition by row_id_str order by NR_close desc) as RN
    from(
        SELECT  row_id_str, demand_rtb_name, close, sum(if(demand_rtb_name = 'rubicon', close, 0)) as R_close, sum(if(demand_rtb_name != 'rubicon', close, 0)) as NR_close
        FROM [scratch.oRubicon1_3] group by 1,2,3
        order by row_id_str, close desc)
    group by row_id_str, close, NR_close, R_close)
group by 1,2,3,

【问题讨论】:

    标签: max google-bigquery window-functions


    【解决方案1】:

    您可以将MAXROW_NUMBER() 结合使用。

    围绕它包装一个新的选择,并选择带有WHERE RowNumber = 2的特定行

    SELECT 
        tMax.row_id_str,
        tMax.MyMax,
        ROW_NUMBER() OVER (ORDER BY(tMax.MyMax)) AS RowNumber
    FROM
        (SELECT 
            t.row_id_str, 
            MAX(t.NR_close)
        FROM
            table AS t
        GROUP BY
            t.row_id_str
        ) AS tMax
    

    【讨论】:

    • 所以我添加了 ROW_NUMBER() over (partition by row_id_str order by NR_close desc) 作为 RN 到第二个选择以及 NR_close 然后在顶部选择我添加 Sum(if(RN=2, NR_close , 0)) 作为 Second_Max。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-23
    • 2021-12-04
    • 2018-01-02
    • 2022-01-22
    • 2020-12-31
    相关资源
    最近更新 更多