2016-12-15 127 views
2

我有這樣SELECT WHERE列1 = 1 AND列2 = MAX(列2)

|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列2 = 1和列3是最大的第2列( 4

+0

你可以使用窗口功能嗎? –

+0

您正在使用哪種RDBMS? – GurV

+0

一個選項是使用子查詢'where Column3 =(從表中選擇Max(Column3))' – juharr

回答

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; 

的最大或做到這一點,如果不支持,但仔細,你必須處理,如果nulls是否有在COL3:

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

謝謝。我試圖這樣做,但在第二個地方我只使用select和where忘記寫FROM的語句。謝謝。 – Parpil

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

在上述SOLN,我使用的窗口函數和WHERE條件提取的組列2 = 1在最大值。在窗口函數的幫助下,您可以在任何特定列上使用任何GROUP BY子句,從而獲得最大值/最小值/計數值。

+0

gon'be duplicates – GurV

+0

這是什麼意思? – Teja