SELECT WHERE column1 = 1 AND column2 = MAX(column2)

时间:2016-12-15 19:17:32

标签: c# sql firebird firebird-3.0

我有这样的表

|Column 1 |Column 2|Column 3|
|        1|       1|       1|
|        2|       1|       2|
|        3|       1|       3|
|        4|       2|       1|
|        5|       1|       4|
|        6|       2|       2|
|        7|       2|       3|
|        8|       2|       4|
|        9|       2|       5|

现在我要做的是选择Column 1, Column 2, Column 3 WHERE Column2 = 1和第3列最大的第2列(4

2 个答案:

答案 0 :(得分:3)

您可以使用窗口函数rank来查找col3的最大值

select col1, col2, col3 from
    (select 
        col1, col2, col3,
        rank() over (order by col3 desc nulls last) rnk
    from my_table
    where col2 = 1)
where rnk = 1;

或者这样做,如果不支持,但要小心,如果col3中有nulls,你必须处理:

select col1, col2, col3
from my_table t
where col2 = 1
and col3 = (select max(col3)
    from my_table
    where col2 = t.col2);

答案 1 :(得分:0)

SELECT Column1,
       Column2,  
       MAX( Column3 ) OVER ( PARTITION BY Column2 ) AS Column3
  FROM Table
 WHERE Column2 = 1;

在上面的soln中,我通过使用Window函数和WHERE条件来提取Group2 = 1组中的最大值。在窗口函数的帮助下,您可以获得最大/最小/计数,而无需在任何特定列上使用任何GROUP BY子句。