2016-12-13 123 views
0

我有這樣的一個表:SQL:選擇一個Colume的最高值的行對每個值

Id Col1 Col2 ... 

1 NULL 1000 
1 x  1001  
1 y  1002 
2 x  2000 
2 y  2001 
2 NULL 2002 
3 z  3000 
.... 

我想與ID = 1或2,其中選擇的所有行:

  1. COL1是NULL

OR

  1. COL1不爲空的d col2的是最大用相同的ID

行中那麼結果應該是

(1, NULL 1000) 
(1, y 1002) 
(2, y 2001) 
(2, NULL 2002) 

因爲我能想到下面的SQL語句的第一個條件:

SELECT * FROM my_table WHERE Id IN (1, 2) and action IS NULL 

對於第二個條件,如果我用這樣的東西:

SELECT * FROM my_table WHERE Id IN (1, 2) and action IS NOY NULL ORDER BY Col2 LIMIT1 

在Id = 1和Id = 2的所有結果中,它只會給我一行最大Col2。

如何爲每個Id組獲得每列最大Col2?有一種使用GROUP BY的感覺,但不知道如何應用它。請給我一個提示!謝謝!

(這基本上是這個question我早些時候公佈的批次版本)

回答

0

嗯。 。 。 where子句中的兩個條件如何:

select t.* 
from my_table t 
where t.col1 is null or 
     t.col2 = (select max(t2.col2) from my_table t2 where t2.id = t.id and t2.col1 is not null);