2016-12-13 93 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);