0

私は以下を持っています

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

最後の 2 行を取得するクエリが必要です。ここでの条件は、2 つの行が同じ Id を持つ場合、出力は flag = 1 を持つ行をフェッチする必要があるということです。Id の行が 1 つしかない場合は、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 に答える