SQL:选择每个值的最大值为一个Colume的行

时间:2016-12-13 00:02:05

标签: sql mysqli group-by greatest-n-per-group

我有一张这样的表:

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
  2. OR

    1. Col1非NULL,Col2在具有相同Id
    2. 的行中最大

      然后结果应该是

      (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组获取Max Col2的每一行?有使用GROUP BY的感觉,但不知道如何应用它。请给我一个提示!谢谢!

      (这基本上是我之前发布的question的批量版本)

1 个答案:

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