使用OVER的第二个最大值

时间:2016-04-26 10:57:52

标签: max google-bigquery window-functions

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

以下是我对最大和特定需求的看法,但我无法弄清楚如何找到第二个最大值。我见过for (var i = 1; i < 51; i++) { $('#hg' + i).change(function () { if ($('#hg' + i).val() > $('#ag' + i).val()) { $('#r' + i).val('1'); } else if ($('#hg' + i).val() < $('#ag' + i).val()) { $('#r' + i).val('2'); } else { $('#r' + i).val('X'); } }) } ,但我不知道如何将其用于Windows函数。

选择row_id_str,Max_NR,Max_R

max(x) where x <> max(x)

解决方案

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

1 个答案:

答案 0 :(得分: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