0

我有以下内容

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

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

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

4

3 回答 3

2
SELECT
*
FROM yourTable yt1
WHERE Flag = (SELECT MAX(Flag) FROM yourTable yt2 WHERE yt1.Id = yt2.Id)
GROUP BY Id
于 2013-07-02T09:25:09.010 回答
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;
于 2013-07-02T09:27:08.200 回答
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

在此处查看小提琴。

于 2013-07-02T09:35:09.580 回答