MySQL根据条件内的条件获取行

时间:2013-07-02 09:20:07

标签: mysql

我有以下

 ---------------------------------
 |   Id       |  Value    | Flag |
 ---------------------------------
 |   1        |   23      |  0   |
 ---------------------------------
 |   1        |   24      |  1   |
 ---------------------------------
 |   2        |   30      |  0   |
 ---------------------------------

我需要一个查询,它应该获取最后两行。这里的条件是IF两行具有相同的Id然后输出应该获取具有flag = 1的行。如果Id只有一行,则应该获取Flag = 0的行。因此,给定要求的输出将是

 ---------------------------------
 |   1     |   24        |   1   |
 ---------------------------------
 |   2     |   30        |   0   |

3 个答案:

答案 0 :(得分:2)

SELECT
*
FROM yourTable yt1
WHERE Flag = (SELECT MAX(Flag) FROM yourTable yt2 WHERE yt1.Id = yt2.Id)
GROUP BY Id

答案 1 :(得分:1)

我更喜欢非核心方法......

SELECT x.*
  FROM my_table x 
  JOIN 
     ( SELECT id,MAX(flag) max_flag FROM my_table GROUP BY id ) y 
    ON y.id = x.id 
   AND y.max_flag = x.flag;

答案 2 :(得分:1)

其他答案对我来说是正确的。这是一种不同的方法:

SELECT t1.*
FROM
  yourtable t1 LEFT JOIN yourtable t2
  ON t1.Id = t2.Id AND t1.Flag=0 AND t2.Flag=1
WHERE
  t2.Id IS NULL

请参阅小提琴here